Skip to content

Class Diagram Evolution #26

@shadyashraf174

Description

@shadyashraf174

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
Loading

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
Loading

Improvements Highlighted:

  1. Added service layer abstraction
  2. Encapsulated collections
  3. Domain value objects
  4. Behavior-rich models

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions