• [Architecture Pattern] Lazy Boundary


    动机 :

    在设计面向对象应用程序架构的时候,关联的对象进出 Data Access Layer(DAL)是一件很复杂的事情。
    Entity Framework是一种解决方案的选择,但是它包装了太多用不习惯的功能。
    例如对象的变更追踪同步这类的功能,一般开发程序的时候主要是新增修改删除查询,很少去处理到追踪同步。

    本文介绍一个轻量级的边界模式,将它架构在Business Logic Layer(BLL)里。
    让DAL层,只专注处理永续储存的数据。
    让BLL层,能简单处理对象与对象关联,方便建立不贫血的对象。

    结构 :

    参与者 :

    User
    - 被关联的对象,UserID是这个对象的索引值。

    UserGroup
    - 包含UserID的集合。

    IUserRepository
    - DAL层实作的界面。
    - 负责User对象的新增、修改、删除、查询。

    IUserGroupRepository
    - DAL层实作的界面。
    - 负责UserGroup对象的新增、修改、删除、查询。
    - (不负责UserGroupEntity的进出)。

    BoundaryContext
    - DAL界面实作注入。
    - 使用UserGroup当作参数,生成UserGroupEntity。

    UserGroupEntity
    - 关联对象的延迟加载。
    - 使用IUserRepository加载User。
    - 关联对象相关函式。(例如用户群组内是否包含某个住址的用户)。

    实作 :

    1. 新增、修改、删除、查询
    - 直接建立UserGroup或是通过BoundaryContext.IUserGroupRepository查询UserGroup。
    - 通过BoundaryContext.IUserGroupRepository做新增、修改、删除。

    2. 针对UserGroupEntity内的User做逻辑运算
    - 直接建立UserGroup或是通过BoundaryContext.IUserGroupRepository取得UserGroup。
    - 再通过BoundaryContext.IUserGroupRepository取得UserGroupEntity。
    - UserGroupEntity使用IUserRepository加载User,并对User做逻辑运算。
    * UserGroupEntity也可以通过BoundaryContext.IUserGroupRepository做新增、修改、删除。

    范例程序 :

    档案下载 : CLK.LazyBoundarySample.rar

    *范例程序简单示范整体的运作,主要是将DAL的工作简化。
    - 如果DAL直接建立UserGroupEntity,那在DAL里面就需要有IUserRepository的参考。

    *范例程序有些功能没有实做
    - 例如 : UserGroup基于效能,一次只延迟加载一个User。
    - 例如 : 修改UserGroup的UserID列表后,重整延迟加载User集合。

  • 相关阅读:
    ACMer第7天Falling Ants
    贪心初步-FatMouse' Trade
    贪心初步-A
    ACM集训第二天
    asp.net中遍历套用母版页的页面的控件
    a 标签中调用js的几种方法
    笔记
    html控件和web控件
    ASP.NET中GUID类
    (转)常见邮件服务器(接收服务器和发送邮件服务器)地址
  • 原文地址:https://www.cnblogs.com/clark159/p/2205108.html
Copyright © 2020-2023  润新知