Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2----整体架构

            就以一个简单的DirectCenter项目开始介绍这个框架吧,DirectCenter主要分为用户管理,部门管理,公司管理三个模块。首先先搭建起解决方案DirectCenter:
          DirectCenter:           
                   DirectCenter.Model    (类库项目)实体类库,其中包括hibernate映射文件(可以把映射文件放到DAL层,这样使Model也比较单纯,而DAL则只是Nhibernate的完整实现)
                   DirectCenter.IDAL     (类库项目)数据访问层接口   
                   DirectCenter.DAL       (类库项目)数据库访问层实现(采用NHibernate)
                   DirectCenter.IBLL     (类库项目)业务层接口
                   DirectCenter.BLL      (类库项目)业务层实现(使用IDAL,通过spring.net的IOC注入实际的数据访问层)
                   DirectCenter.App      (类库项目)系统的配置,其中包括Nhibernate,Spring.net的一些配置信息,业务层的DAL注入.
                   DirectCenter.UnitTest  (类库项目)  使用nunit对业务层进行单元测试

                   DirectCenter.DTO    (类库项目)    data transform  object 用于和前台UI层交互的实体。之所以分出来,也是为了考虑不只是为了Web项目,同时包括WebService等其它UI.(可能会有不少人会问已经有Model了,为什么还需要DTO?)

                   DirectCenter.Controllers  (类库项目)   Web控制器。用户请求和后台业务层的中转,接收并分析用户请求,调用业务层完成请求,再分发给用户。(注意这里调用的是IBLL,是业务逻辑接口,也是通过Spring.Net的IOC注入具体的业务实现)。
                  
DirectCenter.Web (Web Application)  单纯的View层,主要由ExtJs完成界面和Ajax请求。

              当然,这里也可以加一个Controllers的单元测试项目,不过我觉得这里很多时候用处不是很大。因为这里Controllers的工作比较统一和单纯了。
         首先先设计和建立数据库,字段和说明如下:
            未命名.bmp

        数据库中没有外键关系,因为一对多,多对多这些关系使用NHibernate的持久层建立和维护,每个表中都有一个Version字段,这是为了使用Nhibernate内置的对象的版本控制来解决并发问题。
       接下来的工作就简单了许多,因为今天我们只要完成实体就行,而实体类和映射文件的工作有一些辅助工具可以帮我们生成,比如codesmith,Nconstruct,Database2Sharp等,不过我还没有发现哪个工具能够很好的生成关系映射.这里只把User的类和映射文件放在这里,其它的两个可以在源代码附件中找到。

User.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace DirectCenter.Model
{


    [Serializable]
    
public class User  
    
{
        
/**//// <summary>
        
/// 创建日期
        
/// </summary>

        public virtual DateTime CreateTime
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 创建人
        
/// </summary>

        public virtual System.String Creator
        
{
            
get;
            
set;
        }




        
/**//// <summary>
        
/// Email地址
        
/// </summary>

        public virtual System.String Email
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 用户编号
        
/// </summary>
        
/// 

        public virtual System.String UserID
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 导入日期
        
/// </summary>

        public virtual DateTime? ImportTime
        
{
            
get;
            
set;
        }



        
/**//// <summary>
        
/// 手机号码
        
/// </summary>

        public virtual System.String Mobile
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 用户密码
        
/// </summary>

        public virtual System.String Password
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 电话号码
        
/// </summary>

        public virtual System.String Telephone
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 用户名称
        
/// </summary>

        public virtual System.String UserName
        
{
            
get;
            
set;
        }


        
/**//// <summary>
        
/// 生效日期
        
/// </summary>

        public virtual DateTime? ValidFrom
        
{
            
get;
            
set;
        }



        
/**//// <summary>
        
/// 失效日期
        
/// </summary>

        public virtual DateTime? ValidTo
        
{
            
get;
            
set;
        }

 

        
/**//// <summary>
        
/// 所属公司
        
/// </summary>

        public virtual Company Company
        
{
            
get;
            
set;
        }



        
/**//// <summary>
        
/// 所属部门
        
/// </summary>

        public virtual Department Department
        
{
            
get;
            
set;
        }



        
/**//// <summary>
        
/// 直接主管
        
/// </summary>

        public virtual User Manager
        
{
            
get;
            
set;
        }


    }

}

 

 

 

User.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

    
<class name="DirectCenter.Model.User, DirectCenter.Model" table="UserAccount"  lazy="true">

        
<id name="UserID" column="UserID" type="System.String">
            
<generator class="assigned"/>
        
</id>

        
<property name="CreateTime" column="CreateTime"   type="System.DateTime"  />
        
<property name="Creator" column="Creator"   type="System.String"  length="32" />
        
<property name="Email" column="Email"   type="System.String"  length="255" />
 
        
<property name="Mobile" column="Mobile"   type="System.String"  length="15" />
        
<property name="Password" column="Password"   type="System.String"  length="64" />
        
<property name="Telephone" column="Telephone"   type="System.String"  length="20" />
        
<property name="UserName" column="UserName"  not-null="true" type="System.String"  length="32" />
        
<property name="ValidFrom" column="ValidFrom"   type="System.DateTime"  />
        
<property name="ValidTo" column="ValidTo"   type="System.DateTime"   />
 

        
<!--用户所属交易公司-->
        
<many-to-one name="Company"   
          class
="DirectCenter.Model.Company,DirectCenter.Model"
          cascade
="none"
          column
="CompanyID"
           
/>

        
<!--用户所属部门-->
        
<many-to-one name="Department"
          class
="DirectCenter.Model.Department,DirectCenter.Model"
          cascade
="none"
          column
="DepartmentID"
           
/>

        
<!--主管-->
        
<many-to-one name="Manager"
          class
="DirectCenter.Model.User,DirectCenter.Model"
          cascade
="none"
          column
="ManagerID"
           
/>
          
</class>
</hibernate-mapping>

   注:User的表名和实体名不一致的原因是因为User是数据库中的关键字。另外需要注意的是,映射文件中的命名空间要正确,映射文件(*.hbm.xml)不要忘了设置成Embedded Resource (嵌入式资源)。
     
    数据库设计,实体,映射文件是使用这个框架开发最关键的,毕竟是转换需求的最重要的一步。如果设计的好的话,接下来的开发相对容易多了。下次介绍数据访问层和业务层的实现。
   
   代码

作者:孤独侠客似水流年
出处:http://lonely7345.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值