Water for asp.net 之七:多层架构的实现

water-logo 

source code address:water source

demo address:water demo

blogs address:water bolgs

Water提供了一组多层架构的基础类:如下图:

 

其中最低层的Emtity xml部分我们在Water for asp.net 之四:entity xml配置文件Water for asp.net 之六:entity xml配置文件 (续)中以介绍过了。

对于各层次的实现我们只需在相应的层次继承相应的基类(或接口)即可。一下是一个简单的示例:

 

  1. Model层(EmployeesInfo) 
    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    //导入Water.Architecture2.Model;
    using Water.Architecture2.Model;

    namespace demo.Objects.Model
    {
        [Serializable]
        
    public class EmployeesInfo:BaseEntity
        {
        }
    }

     当然你也可以在employeeInfo中定义它的属性,如:

     

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    //导入Water.Architecture2.Model;
    using Water.Architecture2.Model;

    namespace demo.Objects.Model
    {
        [Serializable]
        
    public class EmployeesInfo:BaseEntity
        {
            
    private int id;

            
    public int Id
            {
                
    get { return id; }
                
    set { id = value; }
            }
            
    private string firstName;

            
    public string FirstName
            {
                
    get { return firstName; }
                
    set { firstName = value; }
            }
            
    private string lastName;

            
    public string LastName
            {
                
    get { return lastName; }
                
    set { lastName = value; }
            }

            
    //...
        }
    }

     这完全取决于你的个人爱好,如,你可能有类似于这种返回实体的方法 List< employeeInfo > getEmployees(){...},不过我建议你不用实现它的属性,仅仅定义这个类就可以了,因为这样很简单并且我实现了很多的控件都是返回DataSet或IDataReader的。

     

  2. IDAL层(IEmployeesDAL)
    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    //导入Water framework中Water.Architecture2.IDAL;
    using Water.Architecture2.IDAL;
    //导入当前应用Model
    using demo.Objects.Model;

    namespace demo.Objects.IDAL
    {
        
    public interface IEmployeesDAL:IBaseDAL<EmployeesInfo>
        {
        }
    }

     

  3. DAL层(EmployeesDAL)
    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    //导入Water framework中Water.Architecture2.DAL;
    using Water.Architecture2.DAL;
    //导入当前应用Model
    using demo.Objects.Model;
    //导入当前应用IDAL
    using demo.Objects.IDAL;

    namespace demo.Objects.DAL
    {
        
    public class EmployeesDAL:BaseDAL<EmployeesInfo>,IEmployeesDAL
        {
        }
    }

     其中基类BaseDAL中的方法都是virtual的,所以在这个类中可根据你的数据访问逻辑override基类的方法。


    此外,根据Water for asp.net 之四:entity xml配置文件中关于entity节点的配置

    <entity class="demo.Objects.Model.EmployeesInfo" table="employees" dal-class="demo.Objects.DAL.EmployeesDAL" default-orderby-express="id">

    我们可以指定entity所用的dal-class类,也就是说我们可以定义多个dal-class类。

  4. BLL层(Employees)
    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    //导入Water framework中Water.Architecture2.BLL;
    using Water.Architecture2.BLL;
    //导入当前应用Model
    using demo.Objects.Model;
    //导入当前应用IDAL
    using demo.Objects.IDAL;

    namespace demo.Objects.BLL
    {
        
    public class Employees:BaseBLL<EmployeesInfo,IEmployeesDAL>
        {
        }
    }

     其中基类BaseBLL中的方法都是virtual的,所以在这个类中可根据你的业务逻辑override基类的方法。


 至此,关于Water的ORM和多层结构的实现都介绍完毕!

 

 

posted on 2010-01-27 22:15  guoqiang.liu  阅读(2353)  评论(15编辑  收藏  举报