回顾 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, 与模型和控制器

如果有任何反馈,我将不胜感激

我关心的事情:

  1. 多重性
  2. 关系

这是 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 应该是灰色的,或者图表应该表明它们来自不同的包(参见 ControllerBaseDbContext)。了解依赖关系很有用。

  • Class 图应说明体系结构的扩展点。比如在Bookmarkclass的源码中,我看到了两个虚属性。如果您打算扩展此 class,则应在图表中指明。至少用一个虚拟的具体 class 例子。通常我为它使用颜色(即使它不符合标准 UML)。