-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Current Problematic Structure:
classDiagram
class Program{
+Main()
}
class MyDbContext{
+DbSet~BlogPost~ BlogPosts
+DbSet~BlogComment~ BlogComments
}
class BlogPost{
+Id : int
+Title : string
+Text : string
+Comments : IList~BlogComment~
}
class BlogComment{
+Id : int
+Text : string
+CreatedDate : DateTime
+UserName : string
}
Program --> MyDbContext
MyDbContext --> BlogPost
MyDbContext --> BlogComment
BlogPost --> BlogComment
Key Problems Visualized:
- Direct DbContext exposure to UI
- Public mutable collections
- Primitive-obsessed models
- Bidirectional navigation without safeguards
Proposed Refactored Structure:
classDiagram
class BlogQueryService{
+GetCommentsPerUser() IEnumerable~UserCommentStats~
+GetPostsByLastComment() IEnumerable~PostSummary~
}
class BlogDbContext{
+DbSet~BlogPost~ Posts
+DbSet~BlogComment~ Comments
}
class BlogPost{
-_comments : List~BlogComment~
+Id : PostId
+Title : PostTitle
+Content : PostContent
+AddComment(BlogComment)
+GetComments() IReadOnlyList~BlogComment~
}
class BlogComment{
-_text : CommentText
-_author : User
+Id : CommentId
+EditText(string)
+IsByAuthor(User) bool
}
BlogQueryService --> BlogDbContext
BlogDbContext --> BlogPost
BlogDbContext --> BlogComment
BlogPost --> BlogComment
Improvements Highlighted:
- Added service layer abstraction
- Encapsulated collections
- Domain value objects
- Behavior-rich models
Metadata
Metadata
Assignees
Labels
No labels