【问题标题】:UML Notation of HttpGet methodHttpGet 方法的 UML 表示法
【发布时间】:2022-01-07 10:25:47
【问题描述】:

我正在研究 Web API 的 UML 图

我有一个 HttpGet 方法:

// GET: api/Posts
[HttpGet]
public async Task<ActionResult<IEnumerable<Post>>> GetPosts()
{
   return await _context.Posts.OrderByDescending(x => x.Date).ToListAsync();
}

我不确定如何用ActionResult&lt;IEnumerable&lt;Post&gt; 表明它是一个异步任务,以及返回应该是什么样子。

第二个问题:模型和控制器的关联是什么样的?

【问题讨论】:

  • 请在每个线程中保留一个问题,如果您有更多问题,请打开一个新问题。您仍然可以将这两个问题联系起来。

标签: c# asynchronous asp.net-web-api uml class-diagram


【解决方案1】:

初步评论:尚不清楚 {virtual} 在 UML 中的含义。属性修饰符和约束在最后的语法上是预期的。是否有可能在您的 UML 配置文件中定义了一个构造型,以使用附加语义丰富标准 UML?在这种情况下,它应该是«virtual»

异步设计ActionResult&lt;IEnumerable&lt;Post&gt;&gt; 可以建模为任何其他类型。您可以简单地将其视为一个不同的类,并在GetPosts() 签名中使用它的名称。异步调用没有在类模型中建模,至少如果调用可以是同步的也可以是异步的:这个细节随后显示在序列图中。然而:

  • 您可以考虑使用active classes,用于设计为始终在自己的线程中运行的类。但对类的异步调用似乎不足以证明这一点。
  • 如果某些方法设计为始终被异步调用,您可以考虑将它们建模为receptions of signals。信号和接收是鲜为人知的 UML 特性,专门用于建模异步通信。它和方法一样简单,但在单独的隔间中,位于操作隔间下方,每个隔间都以关键字 «signal» 为前缀。

图表中控制器和模型之间的链接:图表中唯一的模型元素似乎是Post。而PostsController 似乎与Posts 没有任何关系,只是它可能会在某些调用中使用它们。然后,您将使用使用依赖关系(带有«use» 关键字的虚线箭头)显示这种关系。从 MVC 的角度来看,控制器应该以某种方式知道模型以便能够向它发送命令。这种关系可能是间接的(即PostsController 与知道ModelController 相关,而Model 知道Post)但这纯粹是推测性的;您可以针对这个问题提出一个不同的问题,但提供更多信息。

【讨论】:

  • 感谢您的宝贵时间和出色的回答! + { virtual } Images : List 表示: public virtual List Images { get;放; }
  • 如果 virtual 的意思是 abstract,你只需用斜体字写出操作,而没有虚拟的东西。
  • @qwerty_so virtual 不一定是抽象的。虚拟方法可以有一个可以被其特化覆盖的实现。
  • 好的,在那种情况下,一个刻板印象将是合适的,如果......它取决于。将语言专业放在 UML 中不适合我,除非您将自己绑定到该语言。但是,为什么要详细介绍 UML 呢?指出抽象性可能就足够了。
  • @qwerty_so 这是一个非常有效的评论。就个人而言,我不会提到操作的虚拟:这是在某些语言中获得多态行为的要求,而在其他语言中,这是默认保证的。但是在这里,我错过了进行操作的括号,并且操作室是空的。显然这是一个名为 virtual property 的 C# 功能。与 C# 属性一样,这是一种特殊的野兽,它不完全是属性,也不是真正的操作。所以刻板印象是有意义的
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多