回顾 UML class ASP.NET 核心 Web 图 API
Review of UML class Diagram of a ASP.NET Core Web API
我已经为我的 ASP.NET 核心 Web API 创建了一个 UML class 图,它使用 Entity Framework,
与模型和控制器
如果有任何反馈,我将不胜感激
我关心的事情:
- 多重性
- 关系
这是 Bookmark.cs(型号)的示例:
public class Bookmark
{
public int Id { get; set; }
public int PostID { get; set; }
public int UserID { get; set; }
public virtual Post Post { get; set; }
public virtual User User { get; set; }
}
它是控制器 (BookmarksController.cs):
[Route("api/[controller]")]
[ApiController]
public class BookmarksController : ControllerBase
{
private readonly WebContext _context;
public BookmarksController(WebContext context)
{
_context = context;
}
// GET: api/Bookmarks
[HttpGet]
public async Task<ActionResult<IEnumerable<Bookmark>>> GetBookmarks()
{
return await _context.Bookmarks.ToListAsync();
}
// GET: api/Bookmarks/5
[HttpGet("{id}")]
public async Task<ActionResult<Bookmark>> GetBookmark(int id)
{
var bookmark = await _context.Bookmarks.FindAsync(id);
if (bookmark == null)
{
return NotFound();
}
return bookmark;
}
// POST: api/Bookmarks
[HttpPost]
public async Task<ActionResult<Bookmark>> PostBookmark([FromForm]Bookmark bookmark)
{
_context.Bookmarks.Add(bookmark);
await _context.SaveChangesAsync();
return CreatedAtAction("GetBookmark", new { id = bookmark.Id }, bookmark);
}
// DELETE: api/Bookmarks/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBookmark(int id)
{
var bookmark = await _context.Bookmarks.FindAsync(id);
if (bookmark == null)
{
return NotFound();
}
_context.Bookmarks.Remove(bookmark);
await _context.SaveChangesAsync();
return NoContent();
}
}
我不知道领域,所以 IMO 只是一些关于 UML 语法的反馈:
聚合箭头应该在容器上有菱形(而不是包含 class)。
更高的抽象应该在图表的较高部分,因此继承箭头应该从下到上。它有助于理解图表中最重要的部分。
如果可以,请避免交叉箭头。你应该尽量划分你的领域而不是交织在一起。
超出图表范围 classes 应该是灰色的,或者图表应该表明它们来自不同的包(参见 ControllerBase
和 DbContext
)。了解依赖关系很有用。
Class 图应说明体系结构的扩展点。比如在Bookmark
class的源码中,我看到了两个虚属性。如果您打算扩展此 class,则应在图表中指明。至少用一个虚拟的具体 class 例子。通常我为它使用颜色(即使它不符合标准 UML)。
我已经为我的 ASP.NET 核心 Web API 创建了一个 UML class 图,它使用 Entity Framework, 与模型和控制器
如果有任何反馈,我将不胜感激
我关心的事情:
- 多重性
- 关系
这是 Bookmark.cs(型号)的示例:
public class Bookmark
{
public int Id { get; set; }
public int PostID { get; set; }
public int UserID { get; set; }
public virtual Post Post { get; set; }
public virtual User User { get; set; }
}
它是控制器 (BookmarksController.cs):
[Route("api/[controller]")]
[ApiController]
public class BookmarksController : ControllerBase
{
private readonly WebContext _context;
public BookmarksController(WebContext context)
{
_context = context;
}
// GET: api/Bookmarks
[HttpGet]
public async Task<ActionResult<IEnumerable<Bookmark>>> GetBookmarks()
{
return await _context.Bookmarks.ToListAsync();
}
// GET: api/Bookmarks/5
[HttpGet("{id}")]
public async Task<ActionResult<Bookmark>> GetBookmark(int id)
{
var bookmark = await _context.Bookmarks.FindAsync(id);
if (bookmark == null)
{
return NotFound();
}
return bookmark;
}
// POST: api/Bookmarks
[HttpPost]
public async Task<ActionResult<Bookmark>> PostBookmark([FromForm]Bookmark bookmark)
{
_context.Bookmarks.Add(bookmark);
await _context.SaveChangesAsync();
return CreatedAtAction("GetBookmark", new { id = bookmark.Id }, bookmark);
}
// DELETE: api/Bookmarks/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBookmark(int id)
{
var bookmark = await _context.Bookmarks.FindAsync(id);
if (bookmark == null)
{
return NotFound();
}
_context.Bookmarks.Remove(bookmark);
await _context.SaveChangesAsync();
return NoContent();
}
}
我不知道领域,所以 IMO 只是一些关于 UML 语法的反馈:
聚合箭头应该在容器上有菱形(而不是包含 class)。
更高的抽象应该在图表的较高部分,因此继承箭头应该从下到上。它有助于理解图表中最重要的部分。
如果可以,请避免交叉箭头。你应该尽量划分你的领域而不是交织在一起。
超出图表范围 classes 应该是灰色的,或者图表应该表明它们来自不同的包(参见
ControllerBase
和DbContext
)。了解依赖关系很有用。Class 图应说明体系结构的扩展点。比如在
Bookmark
class的源码中,我看到了两个虚属性。如果您打算扩展此 class,则应在图表中指明。至少用一个虚拟的具体 class 例子。通常我为它使用颜色(即使它不符合标准 UML)。