亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列

系統(tǒng) 2565 0

就以一個簡單的DirectCenter項目開始介紹這個框架吧,DirectCenter主要分為用戶管理,部門管理,公司管理三個模塊。首先先搭建起解決方案DirectCenter:
DirectCenter:
DirectCenter.Model (類庫項目)實體類庫,其中包括hibernate映射文件(可以把映射文件放到DAL層,這樣使Model也比較單純,而DAL則只是Nhibernate的完整實現(xiàn))
DirectCenter.IDAL (類庫項目)數(shù)據(jù)訪問層接口
DirectCenter.DAL (類庫項目)數(shù)據(jù)庫訪問層實現(xiàn)(采用NHibernate)
DirectCenter.IBLL (類庫項目)業(yè)務層接口
DirectCenter.BLL (類庫項目)業(yè)務層實現(xiàn)( 使用IDAL,通過spring.net的IOC注入實際的數(shù)據(jù)訪問層 )
DirectCenter.App (類庫項目)系統(tǒng)的配置,其中包括Nhibernate,Spring.net的一些配置信息,業(yè)務層的DAL注入.
DirectCenter.UnitTest (類庫項目) 使用nunit對業(yè)務層進行單元測試

DirectCenter.DTO (類庫項目) data transform object 用于和前臺UI層交互的實體。之所以分出來,也是為了考慮不只是為了Web項目,同時包括WebService等其它UI. (可能會有不少人會問已經(jīng)有Model了,為什么還需要DTO?)

DirectCenter.Controllers (類庫項目) Web控制器。用戶請求和后臺業(yè)務層的中轉,接收并分析用戶請求,調用業(yè)務層完成請求,再分發(fā)給用戶。( 注意這里調用的是IBLL,是業(yè)務邏輯接口,也是通過Spring.Net的IOC注入具體的業(yè)務實現(xiàn))。
DirectCenter.Web (Web Application) 單純的View層,主要由ExtJs完成界面和Ajax請求。

當然,這里也可以加一個Controllers的單元測試項目,不過我覺得這里很多時候用處不是很大。因為這里Controllers的工作比較統(tǒng)一和單純了。
首先先設計和建立數(shù)據(jù)庫,字段和說明如下:


數(shù)據(jù)庫中沒有外鍵關系,因為一對多,多對多這些關系使用NHibernate的持久層建立和維護,每個表中都有一個Version字段,這是為了使用Nhibernate內置的對象的版本控制來解決并發(fā)問題。
接下來的工作就簡單了許多,因為今天我們只要完成實體就行,而實體類和映射文件的工作有一些輔助工具可以幫我們生成,比如codesmith, Nconstruct,Database2Sharp等,不過我還沒有發(fā)現(xiàn)哪個工具能夠很好的生成關系映射.這里只把User的類和映射文件放在這里,其 它的兩個可以在源代碼附件中找到。

User.cs
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace DirectCenter.Model
{


[Serializable]
public class User
{
/**/ /// <summary>
/// 創(chuàng)建日期
/// </summary>

public virtual DateTimeCreateTime
{
get ;
set ;
}


/**/ /// <summary>
/// 創(chuàng)建人
/// </summary>

public virtual System.StringCreator
{
get ;
set ;
}




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

public virtual System.StringEmail
{
get ;
set ;
}


/**/ /// <summary>
/// 用戶編號
/// </summary>
///

public virtual System.StringUserID
{
get ;
set ;
}


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

public virtual DateTime ? ImportTime
{
get ;
set ;
}



/**/ /// <summary>
/// 手機號碼
/// </summary>

public virtual System.StringMobile
{
get ;
set ;
}


/**/ /// <summary>
/// 用戶密碼
/// </summary>

public virtual System.StringPassword
{
get ;
set ;
}


/**/ /// <summary>
/// 電話號碼
/// </summary>

public virtual System.StringTelephone
{
get ;
set ;
}


/**/ /// <summary>
/// 用戶名稱
/// </summary>

public virtual System.StringUserName
{
get ;
set ;
}


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

public virtual DateTime ? ValidFrom
{
get ;
set ;
}



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

public virtual DateTime ? ValidTo
{
get ;
set ;
}



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

public virtual CompanyCompany
{
get ;
set ;
}



/**/ /// <summary>
/// 所屬部門
/// </summary>

public virtual DepartmentDepartment
{
get ;
set ;
}



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

public virtual UserManager
{
get ;
set ;
}


}

}


<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> <? xmlversion="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是數(shù)據(jù)庫中的關鍵字。另外需要注意的是,映射文件中的命名空間要正確,映射文件(*.hbm.xml)不要忘了設置成Embedded Resource (嵌入式資源)。

數(shù)據(jù)庫設計,實體,映射文件是使用這個框架開發(fā)最關鍵的,畢竟是轉換需求的最重要的一步。如果設計的好的話,接下來的開發(fā)相對容易多了。下次介紹數(shù)據(jù)訪問層和業(yè)務層的實現(xiàn)。

代碼

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 2


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕无线码中文字幕免费 | 污宅男666在线永久免费观看 | 亚洲激情网 | 免看一级a毛片一片成人不卡 | 久热爱免费精品视频在线播放 | 久色一区 | 一级黄色a毛片 | 中国国产成人精品久久 | 视频一区免费 | 四虎在线永久精品高清 | 2021久久精品99精品久久 | 天天干人人干 | 亚洲欧美日韩中文在线 | 国产在线精品香蕉综合网一区 | 成人看片黄a免费看视频 | 一本久道久综合久久鬼色 | 久久免费精品国产视频 | 99爱视频免费高清在线观看 | 国产在线精品福利大全 | 亚洲另类图片专区 | 中文字幕一二三区乱码老 | 日韩欧美在线综合网高清 | 亚洲国产午夜精品理论片的软件 | 毛片在线观看视频 | 特级毛片全部免费播放a一级 | 亚洲欧美精品成人久久91 | 国产自产在线 | 亚洲精品一区亚洲精品 | 毛色毛片免费看 | 亚洲欧美日韩国产精品26u | 老潮湿影院免费体验区 | 亚洲自拍小视频 | 在线观看 中文字幕 | 欧美精品午夜 | 国产精品久久久久久久久免费观看 | 波多野结衣高清在线播放 | 亚洲毛片免费在线观看 | 亚洲欧美日韩在线观看二区 | 奇米四色狠狠 | 特级毛片全部免费播放a一级 | 欧美毛片网 |