<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      架構,改善程序復用性的設計~第六講 我的系統結構~將所有可以抽象的項目進行抽象(大結局)

      N層架構及各層之間的通訊標準

      一 總體結構圖

      clip_image001[4]

      二 各個模塊的介紹

      通用項目模塊Project.Common:它是對所有項目都公開的項目組合,主要提供一個與領域無關的通用功能的代碼庫

      clip_image003

      核心項目模塊Project.Core:它是針對某種構架方式(如LINQ To SQL作為底層架構)抽象出來的項目組合,它與領域無關

      clip_image005[4]

      領域項目模塊,它是具體的項目,如XXB項目,它本身也是一個N層架構方式,一般地,它的UI層會繼承我們的Product.Core下的Web.Commons項目,而對應的Entity對應Entity.Commons項目,由于BLL層是針對某種特殊業務領域的,所以在Project.Core里沒有出現BLL層的抽象。

      以下是一個Demo項目的結構

      clip_image007[4]

      三 具體領域模塊各層之間的通訊標準

      由于 project.common和project.core是比較穩定的,而且對所有解決方案都是共用的,所以在這里它不是我們討論的重點,我們主要說一下具體領域模塊的各層間的通訊問題

      領域模塊總體圖:

             
          clip_image008
         
       

      3.1 UI層與BLL層通訊

      添加刪除與更新操作統一使用實體類型,如果要返回信息,請使用統一的消息類

      1 /// <summary>
      2 /// 插入商品
      3 /// </summary>
      4 VMessage AddProduct(Product entity);

       

      而查詢使用統一使用一個字典類型來存儲條件,用一個結構體存儲分頁參數

      1 /// <summary>
      2 /// 根據條件得到分頁結果集
      3 /// </summary>
      4 /// <param name="vp"></param>
      5 /// <param name="pp"></param>
      6 /// <returns></returns>
      7 PagedList<Product> GetProduct(VPredication vp, PagingParam pp);

       

      3.2 BLL層與DAL層通訊

      BLL層將數據進行組合后,調用數據層統一的方法即可,數據層只提供最基礎的GURD操作,涉及到多表插入,查詢的,統一在BLL層進行組合實現。

      下面是業務層代碼的實現:

       1 /// <summary>
       2 /// 商品模塊實現
       3 /// </summary>
       4 public class ProductService : ServiceBase, IProductService
       5 {
       6   IProductRepository iProductRepository = null;
       7   public ProductService()
       8  {
       9   iProductRepository = new ProductRepository();
      10  }
      11 
      12 #region IProductService 成¨|員?à
      13 public Entity.VMessage AddProduct(Entity.Car_Rental.Product entity)
      14 {
      15 try
      16 {
      17   iProductRepository.Insert(entity);
      18   VMessage.IsComplete = true;
      19 }
      20 catch (Exception)
      21 {
      22  // throw; //發布后注釋它¨1
      23  VMessage.IsComplete = false;
      24 }
      25  return VMessage;
      26 }
      27 public Entity.PagedList<Entity.Car_Rental.Product> GetProduct(Entity.VPredication vp, Entity.PagingParam pp)
      28 {
      29   var linq = iProductRepository.GetDetailModel();
      30    return new Entity.PagedList<Entity.Car_Rental.Product>(linq, pp.PageIndex, pp.PageSize);
      31 }
      32 #endregion
      33 }

       

      四 實體驗證機制

      應該是一種前臺特殊效果驗證和實體有效性驗證相結合的一種驗證方式,前臺驗證一般指JS驗證,可能產生一些用戶體驗比較好的效果,實體驗證多在實體層完成,在進行添加,修改等操作時,需要進行些驗證。

      4.1 實體統一基類:

      clip_image010clip_image012[4]

      在EntityBase類中已經完成了對實體非空的驗證,GetRuleViolations方法將返回驗證失敗的迭代結果集,它是一個虛方法,子類可以根據自己的邏輯去復寫它。IsValid是一個屬性,它在判斷實體驗證時被賦值,為true表示成功,反之,驗證失敗。

      對于復合實體,如在前臺表單中可以出現多個實體組合的情況,這時,可以使用MVC的那種方法,頁面元素寫在一個ViewModel里,供這個頁面視圖使用,使用.net的attribute 很容易的可以實現屬性的驗證。

      clip_image014[4]

      在controller層(可能根據業務需要,也會被抽象出來),我們在進行實體添加與修改操作時,需要判斷實體的IsValid,然后再去調用BLL層的方法,一般代碼是這樣:

       1 [HttpPost]
       2 public ActionResult Create(FormCollection collection)
       3 {
       4 News entity = new News();
       5 TryUpdateModel(entity);
       6 entity.CreateDate = DateTime.Now;
       7 entity.UpdateDate = DateTime.Now;
       8 entity.Status = (int)Status.Normal;
       9 if (entity.IsValid)
      10 {
      11 iNewsRepository.Insert(entity);
      12 return AlertToUrl("Index");
      13 }
      14 else
      15 {
      16 entity.GetRuleViolations().ToList().ForEach(i =>
      17 {
      18 ModelState.AddModelError(i.PropertyName, i.ErrorMessage); //驗證沒有通過的信息
      19 });
      20 }
      21 return View();
      22 }

       

      五 接口的重要性

      接口可能會成功我們的累贅,添加了代碼量,(F12)轉到定義時也會帶來不方便,我們是否應該廢棄接口

      它的好處:

      1 統一,穩定的操作規范

      2 使用接口,配和IOC,實現一種操作的多種實現方式的切換

      對DAL層接口與實現的抽象圖示

       
        clip_image015
      posted @ 2012-06-04 14:00  張占嶺  閱讀(3002)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 国产精品国产三级国av| 在线看片免费人成视频久网| 亚洲欧洲日韩精品在线| 亚洲精品久久久久国色天香| 国产精品一区二区色综合| 国产午夜福利免费入口| 国产高清av首播原创麻豆| 国产精品美女黑丝流水| 不卡高清AV手机在线观看| 欧美成人精品三级在线观看| 国产一区国产二区在线视频| 亚洲高清成人av在线| 亚洲最新无码中文字幕久久| 亚洲第一二三区日韩国产| 国产精品福利自产拍久久| 日韩人妻无码一区二区三区久久| 亚洲黄色一级片在线观看| 日本高清中文字幕免费一区二区| 两性午夜刺激性视频| 黄色亚洲一区二区在线观看| 无套内谢少妇一二三四| 人妻久久久一区二区三区| 极品蜜桃臀一区二区av| 亚洲熟妇精品一区二区| 国产对白老熟女正在播放| 丰满人妻熟妇乱又精品视| 麻豆精品久久久久久久99蜜桃| 99国产欧美另类久久久精品| 国产果冻豆传媒麻婆精东| 精品中文字幕一区在线| 高清自拍亚洲精品二区| 国产成人久久精品一区二区| 妓院一钑片免看黄大片| 伊人成色综合人夜夜久久| 国产精品亚洲二区亚瑟| 中国女人熟毛茸茸A毛片| 日韩精品久久不卡中文字幕| XXXXXHD亚洲日本HD| 精品国产中文字幕在线| 风韵丰满妇啪啪区老老熟女杏吧| 国产超碰人人做人人爰|