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
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

分类: .NET

本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2008/08/31/1280719.html,如需转载请自行联系原作者
目录
相关文章
|
11天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
20 7
|
21天前
|
设计模式 存储 前端开发
揭秘.NET架构设计模式:如何构建坚不可摧的系统?掌握这些,让你的项目无懈可击!
【8月更文挑战第28天】在软件开发中,设计模式是解决常见问题的经典方案,助力构建可维护、可扩展的系统。本文探讨了.NET中三种关键架构设计模式:MVC、依赖注入与仓储模式,并提供了示例代码。MVC通过模型、视图和控制器分离关注点;依赖注入则通过外部管理组件依赖提升复用性和可测性;仓储模式则统一数据访问接口,分离数据逻辑与业务逻辑。掌握这些模式有助于开发者优化系统架构,提升软件质量。
33 5
|
20天前
|
负载均衡 Java 应用服务中间件
Spring Boot 多活架构背后究竟隐藏着怎样的神秘力量?快来一探究竟!
【8月更文挑战第29天】在数字化时代,企业应用需具备高可用性和可靠性,Spring Boot 作为一种流行 Java 框架,为实现多活架构(Active-Active Architecture)提供了强大支持。多活架构通过在多个数据中心或节点上同时运行应用,确保高可用性、负载均衡及故障恢复。Spring Boot 可与 Nginx、HAProxy 等负载均衡器集成,并利用 Spring Cloud 实现服务发现与注册,确保系统性能及灾难恢复能力。结合数据库复制和分布式缓存技术,多活架构还能保障数据一致性与同步,满足不同业务需求。
25 1
|
21天前
|
XML 开发框架 .NET
.NET框架:软件开发领域的瑞士军刀,如何让初学者变身代码艺术家——从基础架构到独特优势,一篇不可错过的深度解读。
【8月更文挑战第28天】.NET框架是由微软推出的统一开发平台,支持多种编程语言,简化应用程序的开发与部署。其核心组件包括公共语言运行库(CLR)和类库(FCL)。CLR负责内存管理、线程管理和异常处理等任务,确保代码稳定运行;FCL则提供了丰富的类和接口,涵盖网络、数据访问、安全性等多个领域,提高开发效率。此外,.NET框架还支持跨语言互操作,允许开发者使用C#、VB.NET等语言编写代码并无缝集成。这一框架凭借其强大的功能和广泛的社区支持,已成为软件开发领域的重要工具,适合初学者深入学习以奠定职业生涯基础。
77 1
|
9天前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
23 0
|
18天前
|
消息中间件 Kafka Java
Spring 框架与 Kafka 联姻,竟引发软件世界的革命风暴!事件驱动架构震撼登场!
【8月更文挑战第31天】《Spring 框架与 Kafka 集成:实现事件驱动架构》介绍如何利用 Spring 框架的强大功能与 Kafka 分布式流平台结合,构建灵活且可扩展的事件驱动系统。通过添加 Spring Kafka 依赖并配置 Kafka 连接信息,可以轻松实现消息的生产和消费。文中详细展示了如何设置 `KafkaTemplate`、`ProducerFactory` 和 `ConsumerFactory`,并通过示例代码说明了生产者发送消息及消费者接收消息的具体实现。这一组合为构建高效可靠的分布式应用程序提供了有力支持。
51 0
|
1月前
|
消息中间件 监控 Java
解锁Spring Cloud微服务架构的奥秘:深度剖析拆分原则,打造高内聚低耦合的业务创新引擎!
【8月更文挑战第3天】踏入微服务领域,Spring Cloud以丰富组件助力高效系统构建。微服务拆分需遵循原则确保系统高内聚低耦合且能适应变化。首要原则为单一职责,每个服务专注一个业务功能,降低复杂度并提高可维护性。其次,追求高内聚低耦合以减少服务间影响。围绕业务域拆分有助于保持逻辑清晰及团队协作。处理数据一致性问题时,考虑采用最终一致性模型。Spring Cloud提供Eureka、Zuul/Gateway、Sleuth和Config等工具支持服务发现、路由、跟踪及配置管理,共同构建灵活健壮的微服务架构。
56 2
|
24天前
|
Java 开发工具 Spring
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
【Azure Spring Cloud】使用azure-spring-boot-starter-storage来上传文件报错: java.net.UnknownHostException: xxxxxxxx.blob.core.windows.net: Name or service not known
|
1月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
30 0
|
1月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?