zoukankan      html  css  js  c++  java
  • [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集合。

  • 相关阅读:
    Mono的简单例子
    Struts2基础学习(四)—类型转换器和数据校验
    Struts2基础学习(三)—Result和数据封装
    Struts2基础学习(二)—Action
    Struts2基础学习(一)—初识Struts2
    jQuery基础学习(三)—jQuery中的DOM操作
    jQuery基础学习(二)—jQuery选择器
    jQuery基础学习(一)—jQuery初识
    JavaScript基础学习(九)—DOM
    JavaScript基础学习(八)—事件
  • 原文地址:https://www.cnblogs.com/clark159/p/2205108.html
Copyright © 2011-2022 走看看