一般原则
一般偏大型项目应包含数据访问层与业务处理层
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()