编程开发 > ASP > 文章内容

asp.net架构设计解惑(三)

2010-9-27编辑:dan

例如:

代码

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中的业务类不是和表一一对应的,下图就是一个很好的例子:

asp.net架构设计解惑(二)

热点推荐

登录注册
触屏版电脑版网站地图