zoukankan      html  css  js  c++  java
  • 项目设计思路

    一般原则

    一般偏大型项目应包含数据访问层与业务处理层

    1、数据访问层
      a、数据访问策略
        -DAO,通常一个表一个DAO类
        -Repository,更高抽象层次上处理业务实体聚合
      b、数据访问层
        -unin of work(工作单元)比如数据库的事务模式
        -Query Object(查询对象),格式化规则,自动创建SQL(实际上就是实现ORM的功能)
    2、业务处理层
      a、业务逻辑组织
        -Transcation Script模式(事物脚本模式)例如单个的函数实现单个功能,函数之间相互独立互不干扰。
        -Active Record(活动记录)在业务代码里面额外创建一个类和数据库表的类一一对应,对数据库的操作可以直接抽象到这个类,这个类直接将业务传给数据库类
        -Domain Model(领域模型)(创建一个类,包含属性和方法)
        -Anemic Domain Model(反模式)(创建一个类,只包含属性不包含方法)
        -领域驱动设计 利用Domain Model和Anemic Domain Model来实现业务的过程
      b.设计模式
      -工厂模式
      -策略模式
      。。。

    实例解析

    如上图所示:Infrastructure为基础设计层,放置一些公共组件,比如分页、验证码生成、XSS过滤等模块

          Respository层为数据服务层,负责数据处理以及数据持久化

          Model层(业务处理层)基本功能可以概括为(建模、创建接口、协调),创建的模型用于提供给服务层Service,接口用于限制Repository层,协调用于联系Model和Repository并生成数据模型(协调数据服务层和业务处理层时会用到依赖注入)

          Service层(服务层,消息的发送与响应)服务层调用业务层的协调者得到业务的数据模型,分解业务层的数据模型转化为视图模型,然后返回给UI层

          UI层(视图层)这里的代码相对简单,调用Service的API或接口函数。接受消息发送到Service层,返回视图模型与模板给用户

          Statics放置静态文件

          templates放置模板文件

          DomainDrivenDesign项目配置文件

    业务处理层的基本逻辑代码示例:

    #1、建立模型
    
    class Car:
        pass
    #2、创建接口:
    class ICarRepository:
    
        def add_car_by_product_id(self,nid):
            """
            接口函数
            :param nid:
            :return:
            """
    #3、协调
    
    class CarService:
        def __init__(self,car_repsitory):
            self.carRepository = car_repsitory
    
        def buy(self):
            self.carRepository.add_car_by_product_id()
    

      

          

  • 相关阅读:
    oracle归档空间不足的问题(rman删除归档日志)
    oracle DG查看延时时间
    Convert JS object to JSON string
    转:微信公众平台开发(80) 上传下载多媒体文件
    生成带参数的二维码
    关闭微信浏览器可以使用
    微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏
    如何隐藏微信公众平台右上角按钮
    微信公众平台服务号、订阅号的相关说明选择字号:
    微信公众平台群发消息的方法及注意事项
  • 原文地址:https://www.cnblogs.com/qiangayz/p/9357779.html
Copyright © 2011-2022 走看看