例如:
代码
public class Order { private Guid _id; private DateTime _creationDate; private int _shippingMethod; private int _status; private List<OrderItems> _orderItems; public Guid Id { get { return _id; } set { _id = value; } } public List<OrderItems> OrderItems { get { return _orderItems; } set { _orderItems = value; } } // Business Logic public void Place() { // Validate order based on business rules to ensure it is in // a good state to add to the database // Check for stock availablity on items ordered this.Add(); } public void Cancel() { // Check to ensure this order can be canceled. this.Status = Status.Cancelled(); this.Save(); } public void ProcessOrder() { // Check to ensure this order can be processed. // Validate order based on business rules // Udpate the stock levels of products ordered } // Data Access Methods public void Save() { // Code to persist changes to the database } public void Add() { // Code to Add this object to the database } public void Delete() { // Code to remove this object from the database } public static List<Order> FindAll() { // Code to retrive all Orders from the database } public static Order FindBy(Guid id) { // Code to retrive a specific Order from the database } }
上面的代码中,Order类包含了业务逻辑处理的代码,如Cancel, Process。通过这些方法也调用了数据访问代码来保存数据。
如果在开发的项目中,业务类和数据表是一一对应的关系,例如在开发博客或者论坛,Active Record方式就很合适。
相信很多的项目都是基于这个方式在开发和组织逻辑层,这个方式最大的弊端就是:数据库表只要改动,那么业务逻辑层动,而且这种变动会一直波及到了UI那端。
Domain Model
通过用这种方式来组织业务层的时候,业务层就只是关注把现实中的概念转换为相应的业务逻辑模型,不关注其他的方面。例如,在电子商务网站开发中,一些概念就被建模表示为一个个的业务模型(也就是业务类),Order, Shopping Cart, Customer等。而且和Active Record最大的区别就是:Domain Model中的业务类不是和表一一对应的,下图就是一个很好的例子:

出处:博客园
责任编辑:bluehearts
上一页 asp.net架构设计解惑 [2] 下一页 asp.net架构设计解惑 [4]
◎进入论坛网络编程版块参加讨论
|