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集合。

  • 相关阅读:
    QuickTest Professional对web网站进行测试后没有生成脚本信息解决办法
    如何使用loadrunner进行web网站性能测试
    spring boot架构浅谈
    spring cloud架构
    crontab误删操作的恢复与防范
    linux命令重定向>、>>、 1>、 2>、 1>>、 2>>、 <
    redis原理及使用
    PHP三种字符串界定符的区别(单引号,双引号,<<<)
    php代码加密|PHP源码加密——实现方法
    java一键搭建新项目(地址)
  • 原文地址:https://www.cnblogs.com/clark159/p/2205108.html
Copyright © 2011-2022 走看看