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

  • 相关阅读:
    leetcode 309. Best Time to Buy and Sell Stock with Cooldown
    leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee
    leetcode 32. Longest Valid Parentheses
    leetcode 224. Basic Calculator
    leetcode 540. Single Element in a Sorted Array
    leetcode 109. Convert Sorted List to Binary Search Tree
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 84. Largest Rectangle in Histogram
    leetcode 338. Counting Bits
    git教程之回到过去,版本对比
  • 原文地址:https://www.cnblogs.com/clark159/p/2205108.html
Copyright © 2011-2022 走看看