TheBeerHouse:六也谈类的结构下 (一半的辉煌)


 

最近工作实在是太忙了...所以本文简单了点呵呵先把上次剩下的说完整了

PollsProvider : DataAccess
类里面
    
static public PollsProvider Instance
      
{
         
get
         
{
            
if (_instance == null)
               _instance 
= (PollsProvider)Activator.CreateInstance(
                  Type.GetType(Globals.Settings.Polls.ProviderType));
            
return _instance;
         }

      }

//---这个是从配置接点实力化数据层
-----------------------------------------------------------------------------------------------------------

public class SqlPollsProvider : PollsProvider-上次没有说完这次继续--里面的方法基本一样,我找了个有代表的

//--得到一个数据实体类从而方便插入数据,最后返回影响的行数,这种写法是好的~~最后我会分析的哈哈



using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace MB.TheBeerHouse.DAL
{
   
public class PollDetails
   
{
      
public PollDetails() { }

      
public PollDetails(int id, DateTime addedDate, string addedBy, string questionText, bool isCurrent, bool isArchived, DateTime archivedDate, int votes)
      
{
         
this.ID = id;
         
this.AddedDate = addedDate;
         
this.AddedBy = addedBy;
         
this.QuestionText = questionText;
         
this.IsCurrent = isCurrent;
         
this.IsArchived = isArchived;
         
this.ArchivedDate = archivedDate;
         
this.Votes = votes;
      }


      
private int _id = 0;
       
public int ID
       
{
           
get return _id;}
           
set { _id = value;}
       }


      
private DateTime _addedDate = DateTime.Now;
      
public DateTime AddedDate
      
{
         
get return _addedDate; }
         
set { _addedDate = value; }
      }


      
private string _addedBy = "";
      
public string AddedBy
      
{
         
get return _addedBy; }
         
set { _addedBy = value; }
      }


      
private string  _questionText = "";
      
public string QuestionText
      
{
         
get return _questionText; }
         
set { _questionText = value; }
      }


      
private bool _isCurrent = false;
      
public bool IsCurrent
      
{
         
get return _isCurrent; }
         
set { _isCurrent = value; }
      }


      
private bool _isArchived = false;
      
public bool IsArchived
      
{
         
get return _isArchived; }
         
set { _isArchived = value; }
      }


      
private DateTime _archivedDate = DateTime.MinValue;
      
public DateTime ArchivedDate
      
{
         
get return _archivedDate; }
         
set { _archivedDate = value; }
      }


      
private int _votes = 0;
      
public int Votes
      
{
         
get return _votes; }
         
set { _votes = value; }
      }

   }

}

//--这就是数据实体类~~首先是构造写的不错但是如果是我的化~~用自动代码生成工具写(当然是自己做的)因为太累了,这个类的结构和表一样,用来传递信息给数据层操作的~~,不过最后我还是会说下这个设计

最后看看逻辑层把- -BizObject.cs
--不列代码了~~就是用来数据缓存,用户标识等等比较有意思的一锻我列出来哈哈


      
/// <summary>
      
/// 删除指定开头的缓存
      
/// </summary>

      protected static void PurgeCacheItems(string prefix)
      
{
         prefix 
= prefix.ToLower();
         List
<string> itemsToRemove = new List<string>();
         
         IDictionaryEnumerator enumerator 
= BizObject.Cache.GetEnumerator();
         
while (enumerator.MoveNext())
         
{
            
if (enumerator.Key.ToString().ToLower().StartsWith(prefix))
               itemsToRemove.Add(enumerator.Key.ToString());
         }


         
foreach (string itemToRemove in itemsToRemove)
            BizObject.Cache.Remove(itemToRemove);
      }


接下来就是具体的逻辑功能类的抽象类

 

namespace MB.TheBeerHouse.BLL.Polls
{
   
public abstract class BasePoll : BizObject
   
{
      
private int _id = 0;
      
public int ID
      
{
         
get return _id; }
         
protected set { _id = value; }
      }


      
private DateTime _addedDate = DateTime.Now;
      
public DateTime AddedDate
      
{
         
get return _addedDate; }
         
protected set { _addedDate = value; }
      }


      
private string _addedBy = "";
      
public string AddedBy
      
{
         
get return _addedBy; }
         
protected set { _addedBy = value; }
      }


//--这个是他的节点方便你在扩展功能的时候使用
      protected static PollsElement Settings
      
{
         
get return Globals.Settings.Polls; }
      }


      
/// <summary>
      
/// 在这里要调用逻辑层基类的方法来缓冲对象,怎么说那按照最近学习的概念对象必须对自己负责所以也是对的
      
/// </summary>

      protected static void CacheData(string key, object data)
      
{
         
if (Settings.EnableCaching && data != null)
         
{
            BizObject.Cache.Insert(key, data, 
null,
               DateTime.Now.AddSeconds(Settings.CacheDuration), TimeSpan.Zero);
         }

      }

   }

}
 

//--最后我们来看看真正的实现
Poll : BasePoll--不全写了太多了

      /// <summary>
      
/// 在这个方法中会创建一个新对象然后和数据层沟通插入数据~~
      
/// </summary>

      public static int InsertPoll(string questionText, bool isCurrent)
      
{         
    
//--实力化实体类
         PollDetails record = new PollDetails(0, DateTime.Now, BizObject.CurrentUserName,
            questionText, isCurrent, 
false, DateTime.Now, 0);
         
int ret = SiteProvider.Polls.InsertPoll(record);//--调用数据层的方法
         BizObject.PurgeCacheItems("polls_polls_true");
         
if (isCurrent)
            BizObject.PurgeCacheItems(
"polls_poll_current");
         
return ret;
      }

最后说说一半的辉煌
关于逻辑层写首先第一个问题是类的继承明显太多了,根据最近看到的一本宝典上记载不要超过两层哈哈,写的最好的是逻辑层体现了类要对自己负责的思想
关于数据层:入口部分写的不错~~但是问题还是类的设计过多以及,最近看倒了~~Bridge模式精髓..书上是这样说的,Bridge模式中的实现部分部分各不相同,但都可以通过一个通用接口被访问.系统可以接纳新的实现部分,只要它也使用这个通用接口实现...(也就是说数据层不用这么负责我自己就做了一个可以还不错有空共享出来大家研究研究).睡觉去了...

- -共同进步...情多指教

posted @ 2007-07-04 13:08  苹果王子  阅读(2659)  评论(9编辑  收藏  举报