zoukankan      html  css  js  c++  java
  • 小议架构

    做了这么长时间的软件了,一直没有好好整理一下架构方面的东西,打算写几篇小文章,好好整理一下。

    主要涉及的还是UI层和业务逻辑层 对于 数据层的东西 还是没有怎么好好接触过,一般用orm也差不多了。

    首先是UI层,基本上是mvp的 现在在想mvvm转,但是主要的问题还是很少使用view接口来抽象界面。

    还是来聊一聊mvvm的模式

    mvvm的核心就是vm

    vm既有显示层的逻辑(ICommand),又有领域模型需要暴露的数据(通过属性封装),然后还需要脱离UI,这里需要考虑弹出窗体这种逻辑,需要抽象一个IGetDialog这种类型的接口,来吧弹出窗体等逻辑封装。

    还有就是vm 和 领域模型ENTITY 的关系,通常情况下VM显示的肯定是ENTITY的一个子集,而一般情况下一个VM很可能涉及了多个ENTITY,这个时候大多数做法是直接引用若干的ENTITY,但是最好的方式还是通过ENTITY2VMHelper的方法来解决。

     

    其次就是对于业务逻辑层 采用领域模型组织模式。

    业务逻辑层应该包含有若干的Factory、manager、service、entity,helper。

     

     

    在entity建模时候 应该充分依据业务需求,某个entity也许也是由多个entity组成的(AGGREGATE),同时要注意 entity不应该包含它本身的序列化和反序列化方法。

    AGGREGATE有一系列的规则

    根ENTITY应该有全局标识,他最终负责检查固定的规则

    AGGREGATE内部的ENTITY具有内部唯一标识。

    AGGREGATE外部对象不能引用根ENTITY之外的任何内部对象。如果需要根ENTITY可以把一个ValueObject副本传递给另一个对象。

    只有AGGREGATE的根才能通过数据库查询获取,其他对象需要通过内部遍历找到。

    总之就是通过AGGERGATE来维护内部其他ENtity的完整性。

    譬如一辆汽车是一个根ENTITY,他聚合了 轮胎,发动机,车身等若干ENtity。

    一个订单是一个根ENtity 他可能包括了若干的 产品等等。

  • 相关阅读:
    MFC中实现LISTCRTL控件选中多行进行删除操作
    如何使属性值为“只读”(readonly)的EDIT控件在获取焦点后不显示光标?
    crm 使用stark组件
    ModelForm组件
    自定义admin管理工具(stark组件)
    Django-admin管理工具
    Django-session中间件源码简单分析
    基于角色的权限管理
    ajax参数补充
    datetime模块
  • 原文地址:https://www.cnblogs.com/aoldman/p/2708189.html
Copyright © 2011-2022 走看看