• Ecc


    一、    问题

    简单示例:一个简单的购物框的例子

    构成元素:CustomerOrderItemProduct

    A:抽象出对象模型

    类图:

     

    示例代码:

    在对象模型中添加一个 item.

    public class Order

    {

    private ArrayList itsItems = new ArrayList();

    public void addItem(Product p, int qty)

    {

    Item item = new Item(p, qty);

    itsItems.add(item);

    }

    }

     

    B:抽象出数据模型--数据库中存储的形式

     

    对应上面对象模型的操作代码:

    添加一个 item 到关系模型.

    public class AddItem

    {

    public void addItem(int orderId, String sku, int qty)

    {

    DataBase db = DataBaseFactory.Create();

    db.ExecuteSql ("insert into items values(" +

    orderId + "," + sku + "," +

    qty + ")");

    }

    }

    C:说明

    上面两段代码的实现形式完全不同,可是实现的确是同一个业务逻辑(往一个定单里添加item)。用的到Proxy模式可以很好的解决这个问题。

     

     

    二、    解决办法

    AProxy模式介绍

    Proxy目的:

    Provide a surrogate or placeholder for another object to control access to it.

    Proxy应用常用类型:

    remote proxies are responsible for encoding a request and its arguments and for sending the encoded request to the real subject in a different address space.

    virtual proxies may cache additional information about the real subject so that they can postpone accessing it.

    protection proxies check that the caller has the access permissions required to perform a request.

     

    B:应用Proxy模式来解决问题

     

     

    三、    ECC模型的简介

    Engine-Collection-Class (ECC) 设计模式是一种为分布式/分层应用程序创建可重用企业组件的灵活模型,这类应用程序既可与传统的“胖”客户机一起工作,也可与日益流行的脚本客户机一起工作。由于它有简化的接口和直观的编码样式,ECC 设计模式缩短了开发时间,并使多个开发人员可以实现一致的编程。各公司和开发人员在实现将来的增强时可利用它的可扩展性,并在支持某个应用程序时利用它的可维护性。

    Engine职责:

    • 充当创建 Collection 和 Class 的代理
    • 在创建对象之前检查安全性
    • 将多个 Class 打包成一个 Collection,并将它们返回给客户
    • 为访问 Collection 和 Class 提供一个标准接口
    • 提供业务特定的处理

     

    Collection职责:

    • 提供一个存储 Class 的容器
    • 将接口与容器的实现细节分开
    • 为操纵容器中的 Class 提供服务
    • 保持 Class 的信息
    • 连接其它对象来模拟复杂的关系或层次结构(可选

    可以用许多不同的方法来实现 Collection 的内部存储:数组、链接列表、记录集、XML 或者另一个公用数据存储模型。此处,重要的概念是:实际存储对于高级开发人员是隐藏的,他们总是以相同的方式访问数据,而不管它的存储形式。与 Class 一样,Collection 的接口和实现也是分开的,这就减少了更改实现带来的影响

     

     

     Class职责:

    • 在属性级强制实施业务规则并维护数据完整性
    • 隐藏 Class 属性的的实现细节
    • 将其它对象连接在一起来模拟复杂的关系(可选

     

    ECC 将实体的创建存储属性分离开,从而为业务对象提供了一种三层设计。

    ECC 设计模式使用面向对象的技术(如封装)和一些很流行的设计模式(如 Object Factory Opaque Object Adapter)。

     

     

    通常,Engine 实现一种称为 Object Factory 的设计模式,后者定义了一个用来创建其它对象的接口。在这种情况下,Engine 既创建 Collection 对象,也创建 Class 对象。以这种方式设计 Engine 提供了以下好处:

    • 通过单个接口控制和强制对象的创建
    • 提供检查和强制对象创建的安全性
    • 通过强制同一 COM 单元中对象的创建,在多线程进程中提供运行时好处
    • 提供客户机与 Collection 和 Class 对象之间的松散耦合,这可以增加新的功能而不影响客户机
    • 用已知的有效状态强制对象的创建

    Collection 实现一种称为 Opaque Object Adapter 的模式,这样实现 Collection 提供下列好处:

    • 实现的继承
    • 客户机和 Collection 的内部存储对象之间的松散耦合,允许对象变化对客户机产生最小的影响,或者根本没有影响
    • 处理 Class 对象的能力(如计算总和、计数)

    Class 实现封装的表示方法,意味着内部实现细节对使用它的客户机是隐藏的。这提供以下好处:更改实现细节不会影响客户机。

    2 揭示了 ECC 设计模式中的对象是具体的类这一事实。这意味着没有使用 Implements 关键字,也不存在抽象类(只有接口而没有实现的类)。其主要原因是已对 ECC 设计模式做了调整,它现在使用相同的组件就可以同时支持传统的“胖”客户机和永远流行的脚本客户机,而不需要额外的编码。这种设计决策有助于缩短项目的上市时间并降低成本,因为不必为内部(或外部)应用程序创建或维护不同的组件。

     

     

     

     

    四、    改进ECC模型的办法

    ECC结构

    每个业务对象 ECC引擎(实体控制类:包括add,update,delete,get方法)

              实体类(实体属性和一些状态标识)

                集合(ECC的精华,保存了一堆内存中的实体及维护)

     

    ECC改成这样:

     

             每个业务对象 = ECC引擎(实体工厂,只负责创建Class ,Collection ,但它并没有add,update,delete)

              实体(实体属性+ update)

              实体集合(Add,Delete,Update,Load

               实体的数据库代理对象(负责实际数据层的Add,Delete,Update,Load等方法)

    说明:部分参考SPSSDK文档中的类库设计。

     

     

    五、    应用FrameWork进行开发(具体示例)

    A:目标

    构建一个基础框架类库,封装最基本的数据库存取方式和业务逻辑,为使用者定义统一的方便使用的接口。

     

    B:体系结构和继承层次(类图)

     

     

    C:部分代码示例

                数据代理接口

         public interface IProxy

         {

             IEODataBase DB

             {

                  get;

                  set;

             }

             int Add(EOBaseObject objData);

             void Update(EOBaseObject objData);

             void Delete(EOBaseObject objData);

             EOBaseCollection GetItems();

             void DeleteByID(int id);

             EOBaseObject GetItemByID(int id);

             EOBaseCollection GetItemsByQuery(IQuery objQuery);

                 DataSet ToDataSet();

             EOBaseCollection Load();

             bool IsExist(int id);

     

         } 

    数据代理的基本类:

     

         public abstract class EOProxy : IProxy

         {

             private IEODataBase m_DB;

             public EOProxy(IEODataBase objDB )

             {

                  this.DB = objDB;

             }

             public EOProxy()

             {

             }

             #region IProxy 成员

     

             public IEODataBase DB

             {

                  get

                  {

                       if (this.m_DB != null)

                           return this.m_DB;

                       else

                        return new EODataBaseFactory().Create();

                  }

                  set

                  {

                       // TODO:  添加 EOProxy.DB setter 实现

                       this.m_DB = value;

                  }

             }

             /// <summary>

             /// 记录例外情况的日志

             /// </summary>

             /// <param name="e"></param>

             protected void ExceptionLogs (Exception e)

             {

                  EOException myException = new EOException(e.ToString());

                  myException.Logs();

             }

             protected DataSet GetDataSetFromDB(string strSql)

             {

                  DataSet ds = new DataSet();

                  ds = ((EODataBase)this.DB).RunProc(strSql,ds);

                  return ds;

             }

             public abstract int Add(EOBaseObject objData);

             public abstract void Update(EOBaseObject objData);

             public abstract void Delete(EOBaseObject objData);

             public abstract EOBaseCollection GetItems();

             public abstract void DeleteByID(int id);

             public abstract EOBaseObject GetItemByID(int id);

             public abstract EOBaseCollection GetItemsByQuery(IQuery objQuery);

             public abstract EOBaseCollection Load();

             public abstract DataSet ToDataSet();

             public virtual bool IsExist(int id)

             {

                  return true;

             }

             #endregion

         }

     

     

         /// <summary>

         /// 数据实体对象

         /// </summary>

         public  class EOBaseObject

         {

             #region 域成员

             private int m_ID;

             private string m_Title;

             private string m_Remark;

             private IProxy m_DataProxy;

             private bool m_IsModify = false;

             private bool m_IsDirty = false;

             #endregion

     

              #region 属性

             /// <summary>

             /// 主键

             /// </summary>

             public int ID

             {

                  set

                  {

                       this.m_ID = value;

                  }

                  get

                  {

                       return this.m_ID;

                  }

             }

             /// <summary>

             /// 名称

             /// </summary>

             public string Title

             {

                  set

                  {

                       this.m_Title = value;

                  }

                  get

                  {

                       return this.m_Title;

                  }

             }

     

             /// <summary>

             /// 注释

             /// </summary>

             public string Remark

             {

                  set

                  {

                       this.m_Remark = value;

                  }

                  get

                  {

                       return this.m_Remark;

                  }

             }

             /// <summary>

             /// 数据库代理对象(对数据库的操作)

             /// </summary>

             public virtual IProxy DataProxy

             {

                  get

                  {

                       return this.m_DataProxy;

                  }

                  set

                  {

                       this.m_DataProxy = value;

                  }

             }

             public bool IsModify

             {

                  get

                  {

                       return this.m_IsModify;

                  }

                  set

                  {

                       this.m_IsModify = value;

                  }

             }

             public bool IsDirty

             {

                  get

                  {

                       return this.m_IsDirty;

                  }

                  set

                  {

                       this.m_IsDirty = value;

                  }

             }

            

             #endregion

     

             #region 构造器

     

             /// <summary>

             /// 构造器

             /// </summary>

             public EOBaseObject()

             {

             }

             /// <summary>

             /// 带数据代理对象的构造器

             /// </summary>

             /// <param name="objDataProxy"></param>

             public EOBaseObject(IProxy objDataProxy)

             {

                  this.DataProxy = objDataProxy;

             }

     

             #endregion

     

     

             #region 私有方法

             #endregion

     

             #region 公共方法

     

             /// <summary>

             /// 从数据库中装载数据

             /// </summary>

             /// <returns>对象的一个新实例</returns>

             public EOBaseObject Load(int id)

             {

                  return this.DataProxy.GetItemByID(id);

             }

             public virtual void Update()

             {

                  if (this.IsModify)

                  {

                       this.DataProxy.Update(this);

                  }

             }

             /// <summary>

             /// 显示此对象的标题

             /// </summary>

             /// <returns></returns>

             public virtual string ToShowString()

             {

                  return this.Title;

             }

     

             #endregion

            

         }

     对象集合的基类

         /// <summary>

         /// 集合的基础类

         /// </summary>

         public class EOBaseCollection

         {

             private IProxy m_DataProxy;

             private EOBaseObject[] m_Items;

             public EOBaseObject[] Items

             {

                  set

                  {

                       this.m_Items = value;

                  }

                  get

                  {

                       return this.m_Items;

                  }

             }

             public int Count

             {

                  get

                  {

                       return this.Items.GetLength(0);

                  }

                 

             }

             public virtual IProxy DataProxy

             {

                  get

                  {

                       return this.m_DataProxy;

                  }

                  set

                  {

                       this.m_DataProxy = value;

                  }

             }

             public EOBaseObject this[int index]

             {

                  get

                  {

                       if (this.Items != null)

                       {

                           if ((index >=0) || ( index <= this.Items.GetUpperBound(0)))

                                return this.Items[index];

                           else

                                return null;

                       }

                       else

                       {

                           return null;

                       }

                  }

                  set

                  {

                       if (this.Items != null)

                       {

                           if ((index >=0) || ( index <= this.Items.GetUpperBound(0)))

                                this.Items[index] = value;

                       }

                  }

             }

             public EOBaseCollection()

             {

             }

             public void DeleteByID(int id)

             {

                  this.DataProxy.DeleteByID(id);

             }

             public virtual EOBaseCollection Load()

             {

                  return this.DataProxy.Load();

             }

             public virtual int Add(EOBaseObject objData)

             {

                  return this.DataProxy.Add(objData);

             }

             public virtual bool IsExist(int id)

             {

                  return this.DataProxy.IsExist(id);

             }

             public virtual EOBaseCollection GetItems()

             {

                  return this.DataProxy.Load();

             }

             public virtual DataSet ToDataSet()

             {

                  return this.DataProxy.ToDataSet();

             }

         }

    控制引擎基类:

         public class EOBaseEngine

         {

             public  EOBaseEngine()

             {

             }

         }

    员工数据代理类:

         /// <summary>

         /// 对EOEmployee对象操作的数据库代理类

         /// </summary>

         public class EOEmployeeProxy : EOProxy        

         {

             #region 构造器

     

             public EOEmployeeProxy( IEODataBase objDB) : base(objDB)

             {

             }

             public EOEmployeeProxy()

             {

             }

            

             #endregion

     

             #region 私有方法

     

             /// <summary>

             /// 根据员工的ID删除数据库中一条员工信息

             /// </summary>

             /// <param name="id">员工的ID</param>

             private void Delete(int id)

             {

                  try

                  {

                       string strSql = "Delete From Employee  Where ID = " + id.ToString() ;

                       ((EODataBase)this.DB).RunProc(strSql);

                  }

                  catch(Exception e)

                  {

                       throw e;

                       this.ExceptionLogs(e);

                  }

             }

             private void DeleteRoleFromDB(int employeeID,int roleID)

             {

                  try

                  {

                       string strSql = "Delete From EmployeeRole  Where EmployeeID = " + employeeID.ToString() + " And RoleID =" + roleID.ToString();

                       ((EODataBase)this.DB).RunProc(strSql);

                  }

                  catch(Exception e)

                  {

                       //throw e;

                       this.ExceptionLogs(e);

                  }

             }

             private void AddRoleToDB(int employeeID,int roleID)

             {

                  try

                  {

                       string strSql = "Insert into EmployeeRole(employeeID,RoleID) Values(" + employeeID.ToString() +"," + roleID.ToString() + ")";

                       ((EODataBase)this.DB).RunProc(strSql);

                  }

                  catch(Exception e)

                  {

                       //throw e;

                       this.ExceptionLogs(e);

                  }

             }

             /// <summary>

             /// 从数据库中取得员工数据转化成EOEmployeeCollection对象返回

             /// </summary>

             /// <param name="strSql">选择员工的Sql语句</param>

             /// <returns>EOEmployeeCollection</returns>

             private EOBaseCollection GetDataFromDB(string strSql)

             {

                  EOEmployeeCollection result = new EOEmployeeCollection();

                  DataSet ds = new DataSet();

                  ds = ((EODataBase)this.DB).RunProc(strSql,ds);

                  if (ds.Tables[0].Rows.Count > 0)

                  {

                       result.Items = new EOEmployee[ds.Tables[0].Rows.Count ];

                       for(int i = 0 ;i<ds.Tables[0].Rows.Count ; i++)

                       {

                           EOEmployee myEOEmployee = new EOEmployee();

                           myEOEmployee.ID = CommFunction.StringToInt(ds.Tables[0].Rows[i]["ID"].ToString(),-1);

                           myEOEmployee.DepartmentID = CommFunction.StringToInt(ds.Tables[0].Rows[i]["DepartmentID"].ToString(),-1);

                           myEOEmployee.Code = ds.Tables[0].Rows[i]["Code"].ToString();

                           myEOEmployee.Title = ds.Tables[0].Rows[i]["Name"].ToString();

                           myEOEmployee.Sex = ds.Tables[0].Rows[i]["Sex"].ToString();

                           myEOEmployee.BirthDay = ds.Tables[0].Rows[i]["BirthDay"].ToString();

                           myEOEmployee.HireDate = ds.Tables[0].Rows[i]["HireDate"].ToString();

                           myEOEmployee.Email = ds.Tables[0].Rows[i]["Email"].ToString();

                           myEOEmployee.Address = ds.Tables[0].Rows[i]["Address"].ToString();

                           myEOEmployee.Country = ds.Tables[0].Rows[i]["Country"].ToString();

                           myEOEmployee.City = ds.Tables[0].Rows[i]["City"].ToString();

                           myEOEmployee.Region = ds.Tables[0].Rows[i]["Region"].ToString();

                           myEOEmployee.TitleSelf = ds.Tables[0].Rows[i]["Title"].ToString();

                           myEOEmployee.OfficeAddress = ds.Tables[0].Rows[i]["OfficeAddress"].ToString();

                           myEOEmployee.PersonPhone = ds.Tables[0].Rows[i]["PersonPhone"].ToString();

                           myEOEmployee.OfficePhone = ds.Tables[0].Rows[i]["OfficePhone"].ToString();

                           myEOEmployee.ExtensionPhone = ds.Tables[0].Rows[i]["ExtensionPhone"].ToString();

                           myEOEmployee.HomePhone = ds.Tables[0].Rows[i]["HomePhone"].ToString();

                           myEOEmployee.PostCode = ds.Tables[0].Rows[i]["PostCode"].ToString();

                           myEOEmployee.Remark = ds.Tables[0].Rows[i]["Remark"].ToString();

                           result.Items[i] = myEOEmployee;

                       }

                       return result;

                      

                  }

                  else

                  {

                       return null;

                  }

             }

     

             #endregion

     

             #region 公共方法

     

             #region 对员工对象的操作

     

             /// <summary>

             /// 添加员工

             /// </summary>

             /// <param name="objData">EOEmloyee对象</param>

             /// <returns>员工的ID</returns>

             public override int Add(EOBaseObject objData)

             {

                  //声明并且初始化输入参数数组

                  EOEmployee objEOEmployee = objData as EOEmployee;

                  if (objEOEmployee != null)

                  {

                       try

                       {

                           SqlParameter[] paras = new SqlParameter[21];

     

                           SqlParameter departmentID = new SqlParameter("@DepartmentID",System.Data.SqlDbType.Int,10);

                           departmentID.Value = objEOEmployee.DepartmentID;

                           paras[0] = departmentID;

                           SqlParameter code = new SqlParameter("@Code",System.Data.SqlDbType.VarChar,50);

                           code.Value = objEOEmployee.Code;

                           paras[1] = code;

                           SqlParameter name = new SqlParameter("@Name",System.Data.SqlDbType.VarChar,50);

                           name.Value = objEOEmployee.Title;

                           paras[2] = name;

                           SqlParameter sex = new SqlParameter("@Sex",System.Data.SqlDbType.VarChar,50);

                           sex.Value = objEOEmployee.Sex;

                           paras[3] = sex;

                           SqlParameter birthday = new SqlParameter("@BirthDay",System.Data.SqlDbType.VarChar,50);

                           birthday.Value = objEOEmployee.BirthDay;

                           paras[4] = birthday;

                           SqlParameter hireDate = new SqlParameter("@HireDate",System.Data.SqlDbType.VarChar,50);

                           hireDate.Value = objEOEmployee.HireDate;

                           paras[5] = hireDate;

                           SqlParameter email = new SqlParameter("@Email",System.Data.SqlDbType.VarChar,50);

                           email.Value = objEOEmployee.Email;

                           paras[6] = email;

                           SqlParameter address = new SqlParameter("@Address",System.Data.SqlDbType.VarChar,50);

                           address.Value = objEOEmployee.Address;

                           paras[7] = address;

                           SqlParameter country = new SqlParameter("@Country",System.Data.SqlDbType.VarChar,50);

                           country.Value = objEOEmployee.Country;

                           paras[8] = country;

                           SqlParameter city = new SqlParameter("@City",System.Data.SqlDbType.VarChar,50);

                           city.Value = objEOEmployee.City;

                           paras[9] = city;

                           SqlParameter region = new SqlParameter("@Region",System.Data.SqlDbType.VarChar,50);

                           region.Value = objEOEmployee.Region;

                           paras[10] = region;

                           SqlParameter title = new SqlParameter("@Title",System.Data.SqlDbType.VarChar,50);

                           title.Value = objEOEmployee.TitleSelf;

                           paras[11] = title;

                           SqlParameter officeAddress = new SqlParameter("@OfficeAddress",System.Data.SqlDbType.VarChar,50);

                           officeAddress.Value = objEOEmployee.OfficeAddress;

                           paras[12] = officeAddress;

                           SqlParameter personPhone = new SqlParameter("@PersonPhone",System.Data.SqlDbType.VarChar,50);

                           personPhone.Value = objEOEmployee.PersonPhone;

                           paras[13] = personPhone;

                           SqlParameter officePhone = new SqlParameter("@OfficePhone",System.Data.SqlDbType.VarChar,50);

                           officePhone.Value = objEOEmployee.OfficePhone;

                           paras[14] = officePhone;

                           SqlParameter extensionPhone = new SqlParameter("@ExtensionPhone",System.Data.SqlDbType.VarChar,50);

                           extensionPhone.Value = objEOEmployee.ExtensionPhone;

                           paras[15] = extensionPhone;

                           SqlParameter homePhone = new SqlParameter("@HomePhone",System.Data.SqlDbType.VarChar,50);

                           homePhone.Value = objEOEmployee.HomePhone;

                           paras[16] = homePhone;

                           SqlParameter postCode = new SqlParameter("@PostCode",System.Data.SqlDbType.VarChar,50);

                           postCode.Value = objEOEmployee.PostCode;

                           paras[17] = postCode;

                            SqlParameter image = new SqlParameter("@Image",System.Data.SqlDbType.Image);

                           image.Value = objEOEmployee.Image;

                           paras[18] = image;

                           SqlParameter remark = new SqlParameter("@Remark",System.Data.SqlDbType.VarChar,50);

                           remark.Value = objEOEmployee.Remark;

                           paras[19] = remark;

                           SqlParameter id = new SqlParameter("@ID",System.Data.SqlDbType.Int,10);

                           id.Direction =  ParameterDirection.Output ;

                           paras[20] = id;

                           //调用父类的CreateCmd方法创建Command对象

                           SqlCommand Cmm = ((EODataBase)this.DB).CreateCmd("AddEmployee",paras);

                           //执行存储过程

                           Cmm.ExecuteNonQuery();

                           return int.Parse(id.Value.ToString());

                       }

                       catch(Exception e)

                       {

                           //throw e;

                           this.ExceptionLogs(e);

                           return -1;

                       }

                      

                  }

                  else

                  {

                       return -1;

                  }

             }

             /// <summary>

             /// 删除员工

             /// </summary>

             /// <param name="objData">EOEmloyee对象</param>

             public override void Delete(EOBaseObject objData)

             {

                  this.Delete(objData.ID);

             }

             /// <summary>

             /// 删除一条员工信息

             /// </summary>

             /// <param name="id">员工ID</param>

             public override void DeleteByID(int id)

             {

                  this.Delete(id);

             }

             /// <summary>

             /// 更新员工信息

             /// </summary>

             /// <param name="objData">员工对象</param>

             public override void Update(EOBaseObject objData)

             {

                  //声明并且初始化输入参数数组

                  EOEmployee objEOEmployee = objData as EOEmployee;

                  if (objEOEmployee != null)

                  {

                       try

                       {

                           SqlParameter[] paras = new SqlParameter[21];

     

                           SqlParameter departmentID = new SqlParameter("@DepartmentID",System.Data.SqlDbType.Int,10);

                           departmentID.Value = objEOEmployee.DepartmentID;

                           paras[0] = departmentID;

                           SqlParameter code = new SqlParameter("@Code",System.Data.SqlDbType.VarChar,50);

                           code.Value = objEOEmployee.Code;

                           paras[1] = code;

                           SqlParameter name = new SqlParameter("@Name",System.Data.SqlDbType.VarChar,50);

                           name.Value = objEOEmployee.Title;

                           paras[2] = name;

                           SqlParameter sex = new SqlParameter("@Sex",System.Data.SqlDbType.VarChar,50);

                           sex.Value = objEOEmployee.Sex;

                           paras[3] = sex;

                           SqlParameter birthday = new SqlParameter("@BirthDay",System.Data.SqlDbType.VarChar,50);

                           birthday.Value = objEOEmployee.BirthDay;

                           paras[4] = birthday;

                           SqlParameter hireDate = new SqlParameter("@HireDate",System.Data.SqlDbType.VarChar,50);

                           hireDate.Value = objEOEmployee.HireDate;

                           paras[5] = hireDate;

                           SqlParameter email = new SqlParameter("@Email",System.Data.SqlDbType.VarChar,50);

                           email.Value = objEOEmployee.Email;

                           paras[6] = email;

                           SqlParameter address = new SqlParameter("@Address",System.Data.SqlDbType.VarChar,50);

                           address.Value = objEOEmployee.Address;

                           paras[7] = address;

                           SqlParameter country = new SqlParameter("@Country",System.Data.SqlDbType.VarChar,50);

                           country.Value = objEOEmployee.Country;

                           paras[8] = country;

                           SqlParameter city = new SqlParameter("@City",System.Data.SqlDbType.VarChar,50);

                           city.Value = objEOEmployee.City;

                           paras[9] = city;

                           SqlParameter region = new SqlParameter("@Region",System.Data.SqlDbType.VarChar,50);

                           region.Value = objEOEmployee.Region;

                           paras[10] = region;

                           SqlParameter title = new SqlParameter("@Title",System.Data.SqlDbType.VarChar,50);

                           title.Value = objEOEmployee.TitleSelf;

                           paras[11] = title;

                           SqlParameter officeAddress = new SqlParameter("@OfficeAddress",System.Data.SqlDbType.VarChar,50);

                           officeAddress.Value = objEOEmployee.OfficeAddress;

                           paras[12] = officeAddress;

                           SqlParameter personPhone = new SqlParameter("@PersonPhone",System.Data.SqlDbType.VarChar,50);

                           personPhone.Value = objEOEmployee.PersonPhone;

                           paras[13] = personPhone;

                           SqlParameter officePhone = new SqlParameter("@OfficePhone",System.Data.SqlDbType.VarChar,50);

                           officePhone.Value = objEOEmployee.OfficePhone;

                           paras[14] = officePhone;

                           SqlParameter extensionPhone = new SqlParameter("@ExtensionPhone",System.Data.SqlDbType.VarChar,50);

                           extensionPhone.Value = objEOEmployee.ExtensionPhone;

                           paras[15] = extensionPhone;

                           SqlParameter homePhone = new SqlParameter("@HomePhone",System.Data.SqlDbType.VarChar,50);

                           homePhone.Value = objEOEmployee.HomePhone;

                           paras[16] = homePhone;

                           SqlParameter postCode = new SqlParameter("@PostCode",System.Data.SqlDbType.VarChar,50);

                           postCode.Value = objEOEmployee.PostCode;

                           paras[17] = postCode;

                           SqlParameter image = new SqlParameter("@Image",System.Data.SqlDbType.Image);

                           image.Value = objEOEmployee.Image;

                           paras[18] = image;

                           SqlParameter remark = new SqlParameter("@Remark",System.Data.SqlDbType.VarChar,50);

                           remark.Value = objEOEmployee.Remark;

                           paras[19] = remark;

                           SqlParameter id = new SqlParameter("@ID",System.Data.SqlDbType.Int,10);

                           id.Value =  objEOEmployee.ID;

                           paras[20] = id;

                           //调用父类的CreateCmd方法创建Command对象

                           SqlCommand Cmm = ((EODataBase)this.DB).CreateCmd("UpdateEmployee",paras);

                           //执行存储过程

                           Cmm.ExecuteNonQuery();

                       }

                       catch(Exception e)

                       {

                           throw e;

                           this.ExceptionLogs(e);

                          

                       }

                      

                  }

                 

             }

     

             #endregion

     

             #region 从数据库装载数据

     

             #region 取得一个员工信息

             /// <summary>

             /// 取得一个员工存储在数据库中的纪录

             /// </summary>

             /// <param name="id">员工ID</param>

             /// <returns></returns>

             public override EOBaseObject GetItemByID(int id)

             {

                  EOEmployee myEOEmployee = new EOEmployee();

                  string strSql = "Select * From Employee Where ID = " + id.ToString();

                  SqlDataReader dr = ((EODataBase)this.DB).RunProcGetReader(strSql);

                  if (dr.Read())

                  {  

                       myEOEmployee.ID = CommFunction.StringToInt(dr["ID"].ToString(),-1);

                       myEOEmployee.DepartmentID = CommFunction.StringToInt(dr["DepartmentID"].ToString(),-1);

                       myEOEmployee.Code = dr["Code"].ToString();

                       myEOEmployee.Title = dr["Name"].ToString();

                       myEOEmployee.Sex = dr["Sex"].ToString();

                       myEOEmployee.BirthDay = dr["BirthDay"].ToString();

                       myEOEmployee.HireDate = dr["HireDate"].ToString();

                       myEOEmployee.Email = dr["Email"].ToString();

                       myEOEmployee.Address = dr["Address"].ToString();

                       myEOEmployee.Country = dr["Country"].ToString();

                       myEOEmployee.City = dr["City"].ToString();

                       myEOEmployee.Region = dr["Region"].ToString();

                       myEOEmployee.TitleSelf = dr["Title"].ToString();

                       myEOEmployee.OfficeAddress = dr["OfficeAddress"].ToString();

                       myEOEmployee.PersonPhone = dr["PersonPhone"].ToString();

                       myEOEmployee.OfficePhone = dr["OfficePhone"].ToString();

                       myEOEmployee.ExtensionPhone = dr["ExtensionPhone"].ToString();

                       myEOEmployee.HomePhone = dr["HomePhone"].ToString();

                       myEOEmployee.PostCode = dr["PostCode"].ToString();

                       myEOEmployee.Remark = dr["Remark"].ToString();

                       return myEOEmployee;

                  }

                  else

                  {

                       return null;

                  }

             }

             #endregion

     

             #region 装载员工图片

             /// <summary>

             /// 根据提供的员工ID从数据库中读取员工相片数据

             /// </summary>

             /// <param name="id">员工ID</param>

             /// <returns>包含员工图片信息的二进制数据,如果此图片不存在返回null</returns>

             public byte[] GetImageByID(int id)

             {

                  string strSql = "Select Image From Employee Where ID = " + id.ToString();

                  SqlDataReader dr = ((EODataBase)this.DB).RunProcGetReader(strSql);

                  if (dr.Read())

                  {

                       if   (!dr.GetSqlBinary(0).IsNull)

     

                           return (byte[])dr.GetSqlBinary(0).Value ;

                       else

                           return null;

                  }

                  else

                  {

                       return null;

                  }

             }

             #endregion

     

             #region 返回集合对象

     

             public override EOBaseCollection GetItemsByQuery(IQuery objQuery)

             {

                  return GetDataFromDB(objQuery.CreateSelectSql());

             }

             /// <summary>

             /// 从数据库中装载入所有员工的信息

             /// </summary>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public override EOBaseCollection GetItems()

             {

                  return this.Load();

             }

             /// <summary>

             /// 从数据库中装载入所有员工的信息

             /// </summary>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public override EOBaseCollection Load()

             {

                  return GetDataFromDB("Select * From Employee order by ID");

             }

             /// <summary>

             /// 从数据库装载某个部门的员工信息

             /// </summary>

             /// <param name="departmentID">员工所属部门ID</param>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public EOBaseCollection Load(int departmentID)

             {

                  return GetDataFromDB("Select * From Employee Where DepartmentID = " + departmentID.ToString() + " Order By ID");

             }

             /// <summary>

             /// 按条件从数据库装载员工信息

             /// </summary>

             /// <param name="strWhere">Where条件语句</param>

             /// <param name="strOrderBy">Order by 语句</param>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public EOBaseCollection Load(string strWhere ,string strOrderBy)

             {

                  return this.GetDataFromDB("Select * From Employee " + strWhere + " " + strOrderBy );

             }

             #endregion

     

             #region 返回DataSet对象

             /// <summary>

             ///  从数据库中装载入所有员工的信息

             /// </summary>

             /// <returns>DataSet</returns>

             public override  DataSet ToDataSet()

             {

                  return this.GetDataSetFromDB("Select * From Employee Order by ID");

             }

             /// <summary>

             /// 从数据库装载某个部门的员工信息

             /// </summary>

              /// <param name="departmentID">员工所属部门ID</param>

             /// <returns>员工集合对象DataSet</returns>

             public DataSet ToDataSet(int departmentID)

             {

                  return this.GetDataSetFromDB("Select * From Employee Where DepartmentID = " + departmentID.ToString() + " Order By ID");

             }

             /// <summary>

             /// 按条件从数据库装载员工信息

             /// </summary>

             /// <param name="strWhere">Where条件语句</param>

             /// <param name="strOrderBy">Order by 语句</param>

             /// <returns>员工集合对象DataSet</returns>

             public DataSet ToDataSet(string strWhere ,string strOrderBy)

             {

                  return this.GetDataSetFromDB("Select * From Employee " + strWhere + " " + strOrderBy );

             }

            

             #endregion

     

             #endregion

     

             #region 员工对象的业务操作

     

             #region 员工角色操作

     

             public bool HasRole(int employeeID,int roleID)

             {

                  return true;

             }

            

             public void AddRole(int employeeID,int roleID)

             {

                  AddRoleToDB(employeeID,roleID);

             }

            

             public void DeleteRole(int employeeID,int roleID)

             {

                  DeleteRoleFromDB(employeeID,roleID);

             }

     

             #endregion

     

             #endregion

     

             #endregion

         }

     

    员工类:

         /// <summary>

         /// 员工类

         /// </summary>

         public class EOEmployee : EOBaseObject

         {

             #region 域成员

     

             private string m_BirthDay;

             private string m_Code;

             private byte[] m_Image;

             private string m_Address;

             private int m_DepartmentID;

             private string m_Sex;

             private string m_HireDate;

             private string m_Email;

             private string m_Country;

             private string m_City;

             private string m_Region;

             private string m_TitleSelf;

             private string m_OfficeAddress;

             private string m_PersonPhone;

             private string m_OfficePhone;

             private string m_ExtensionPhone;

             private string m_HomePhone;

             private string m_PostCode;

             private EORoleCollection m_Roles;

             private EOWorkGroupCollection m_WorkGroups;

             #endregion

     

             #region 属性

     

             #region 此对象的基本属性

             /// <summary>

             /// 员工代码

             /// </summary>

             public string Code

             {

                  get

                  {

                       return this.m_Code;

                  }

                  set

                  {

                       this.m_Code = value;

                  }

             }

            

             /// <summary>

             /// 出生日期

             /// </summary>

             public string BirthDay

             {

                  set

                  {

                       if (this.IsCorrectDate(value.ToString()))

                       {

                           this.m_BirthDay = value;

                       }

                  }

                  get

                  {

                       return this.m_BirthDay;

                  }

             }

     

             /// <summary>

             /// 一个员工所属的部门ID

             /// </summary>

             public int DepartmentID

             {

                  get

                  {

                       /*Begin Template Expansion{D7851538-F275-42DD-A647-06062E14939E}*/

                       return m_DepartmentID;          

                       /*End Template Expansion{D7851538-F275-42DD-A647-06062E14939E}*/

                       return m_DepartmentID;          

                  }

                  set

                  {

                       /*Begin Template Expansion{7FF81CFB-D694-4156-B629-FB1D0C92E7AF}*/

                       m_DepartmentID = value;         

                       /*End Template Expansion{7FF81CFB-D694-4156-B629-FB1D0C92E7AF}*/

                       if (this.IsExist(int.Parse(value.ToString())))

                       {

                           m_DepartmentID = value;

                       }

                  }

             }

             /// <summary>

             /// 员工性别

             /// </summary>

             public string Sex

             {

                  get

                  {

                       /*Begin Template Expansion{6221B2C0-E187-476A-9674-4E9A1D37BCD4}*/

                       return m_Sex;         

                       /*End Template Expansion{6221B2C0-E187-476A-9674-4E9A1D37BCD4}*/

                       return m_Sex;         

                  }

                  set

                  {

                       /*Begin Template Expansion{EF747F8D-FA71-4D25-BE53-27FD39C85A48}*/

                       m_Sex = value;             

                       /*End Template Expansion{EF747F8D-FA71-4D25-BE53-27FD39C85A48}*/

                       if (value.ToString().Trim().Equals("女"))

                       {

                           m_Sex = "女";     

                       }

                       else

                       {

                            m_Sex = "男";

                       }

                  }

             }

             /// <summary>

             /// 雇佣日期

             /// </summary>

             public string HireDate

             {

                  get

                  {

                       /*Begin Template Expansion{C06F1936-790F-4B4D-B8D7-53CDD6FE06BF}*/

                       return m_HireDate;         

                       /*End Template Expansion{C06F1936-790F-4B4D-B8D7-53CDD6FE06BF}*/

                       return m_HireDate;         

                  }

                  set

                  {

                       /*Begin Template Expansion{27BE2C52-2015-48D4-825E-7BD31913D8FC}*/

                       m_HireDate = value;             

                       /*End Template Expansion{27BE2C52-2015-48D4-825E-7BD31913D8FC}*/

                       if (this.IsCorrectDate(value.ToString()))

                       {

                           m_HireDate = value;   

                       }

                  }

             }

             /// <summary>

             /// 电子信箱

             /// </summary>

             public string Email

             {

                  get

                  {

                       /*Begin Template Expansion{C76A3F8E-9459-4987-AEB8-28895A26FBD7}*/

                       return m_Email;            

                       /*End Template Expansion{C76A3F8E-9459-4987-AEB8-28895A26FBD7}*/

                       return m_Email;            

                  }

                  set

                  {

                       /*Begin Template Expansion{43A4F7B5-40D1-454D-90F5-B183D09E0327}*/

                       m_Email = value;           

                       /*End Template Expansion{43A4F7B5-40D1-454D-90F5-B183D09E0327}*/

                       if (this.IsCorrectEmail(value.ToString()))

                       {

                           m_Email = value;

                       }

                  }

             }

             /// <summary>

             /// 地址

             /// </summary>

             public string Address

             {

                  get

                  {

                       /*Begin Template Expansion{383D7B74-EED0-4EAE-8FC1-C6BDD61B9B43}*/

                       return m_Address;          

                       /*End Template Expansion{383D7B74-EED0-4EAE-8FC1-C6BDD61B9B43}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{F96634C4-BD2E-482C-B347-212AA2D618C6}*/

                       m_Address = value;         

                       /*End Template Expansion{F96634C4-BD2E-482C-B347-212AA2D618C6}*/

                  }

             }

             /// <summary>

             /// 国家

             /// </summary>

             public string Country

             {

                  get

                  {

                       /*Begin Template Expansion{63C3DE51-6346-4472-B0AD-ED24B91732A4}*/

                       return m_Country;          

                       /*End Template Expansion{63C3DE51-6346-4472-B0AD-ED24B91732A4}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{73D5B7F7-8A8D-4F74-86D2-3BCDF12090AB}*/

                       m_Country = value;         

                       /*End Template Expansion{73D5B7F7-8A8D-4F74-86D2-3BCDF12090AB}*/

                  }

             }

             /// <summary>

             /// 所在城市

             /// </summary>

             public string City

             {

                  get

                  {

                       /*Begin Template Expansion{9E6D1025-2787-4117-877F-E06B1CEA1F13}*/

                       return m_City;             

                       /*End Template Expansion{9E6D1025-2787-4117-877F-E06B1CEA1F13}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{D3D8BD6B-0385-44BE-983E-AF69345003FB}*/

                       m_City = value;            

                       /*End Template Expansion{D3D8BD6B-0385-44BE-983E-AF69345003FB}*/

                  }

             }

             /// <summary>

             /// 所在省

             /// </summary>

             public string Region

             {

                  get

                  {

                       /*Begin Template Expansion{70071213-E98D-4AB8-BAB7-24C9AC2C3817}*/

                       return m_Region;           

                       /*End Template Expansion{70071213-E98D-4AB8-BAB7-24C9AC2C3817}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{4ABE6D12-B23D-48BD-9BFE-791D9955626C}*/

                       m_Region = value;          

                       /*End Template Expansion{4ABE6D12-B23D-48BD-9BFE-791D9955626C}*/

                  }

             }

             /// <summary>

             /// 头衔

             /// </summary>

             public string TitleSelf

             {

                  get

                  {

                       /*Begin Template Expansion{BB073DDE-CB4A-43AE-B75B-FC250D670208}*/

                       return m_TitleSelf;             

                       /*End Template Expansion{BB073DDE-CB4A-43AE-B75B-FC250D670208}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{D04167D2-E5AE-4914-863E-134E03DCCC8C}*/

                       m_TitleSelf = value;            

                       /*End Template Expansion{D04167D2-E5AE-4914-863E-134E03DCCC8C}*/

                  }

             }

             /// <summary>

             /// 工作室地址

             /// </summary>

             public string OfficeAddress

             {

                  get

                  {

                       /*Begin Template Expansion{3CF642DB-26FC-4C9B-A2D3-8D4474F030C6}*/

                       return m_OfficeAddress;         

                       /*End Template Expansion{3CF642DB-26FC-4C9B-A2D3-8D4474F030C6}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{D43C18D5-4E35-4902-9E00-B3EACA275573}*/

                       m_OfficeAddress = value;            

                       /*End Template Expansion{D43C18D5-4E35-4902-9E00-B3EACA275573}*/

                  }

             }

             /// <summary>

             /// 个人电话

             /// </summary>

             public string PersonPhone

             {

                  get

                  {

                       /*Begin Template Expansion{0FF4521D-4BA4-4D7E-BE73-C75B014DE94C}*/

                       return m_PersonPhone;           

                       /*End Template Expansion{0FF4521D-4BA4-4D7E-BE73-C75B014DE94C}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{853BE935-CA54-476B-A864-2C336AF1A555}*/

                       m_PersonPhone = value;          

                       /*End Template Expansion{853BE935-CA54-476B-A864-2C336AF1A555}*/

                  }

             }

             /// <summary>

             /// 办公电话

             /// </summary>

             public string OfficePhone

             {

                  get

                  {

                       /*Begin Template Expansion{C6A24907-4AF6-4633-9874-48EB62D932F7}*/

                       return m_OfficePhone;           

                       /*End Template Expansion{C6A24907-4AF6-4633-9874-48EB62D932F7}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{3586A970-9BF5-4BBC-8D38-F1486246E422}*/

                       m_OfficePhone = value;          

                       /*End Template Expansion{3586A970-9BF5-4BBC-8D38-F1486246E422}*/

                  }

             }

             /// <summary>

             /// 分机

             /// </summary>

             public string ExtensionPhone

             {

                  get

                  {

                       /*Begin Template Expansion{3235D735-B2E4-47BF-A16E-0A7E32F4047B}*/

                       return m_ExtensionPhone;            

                       /*End Template Expansion{3235D735-B2E4-47BF-A16E-0A7E32F4047B}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{38555FDB-250D-42C2-BD97-525D383D762C}*/

                       m_ExtensionPhone = value;           

                       /*End Template Expansion{38555FDB-250D-42C2-BD97-525D383D762C}*/

                  }

             }

             /// <summary>

             /// 家庭电话

             /// </summary>

             public string HomePhone

             {

                  get

                  {

                       /*Begin Template Expansion{1957FD86-BE9B-40B7-A825-E667CB966DA1}*/

                       return m_HomePhone;             

                       /*End Template Expansion{1957FD86-BE9B-40B7-A825-E667CB966DA1}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{AF9BB9FD-BCEE-48A1-9C19-5E3208E279F0}*/

                       m_HomePhone = value;            

                       /*End Template Expansion{AF9BB9FD-BCEE-48A1-9C19-5E3208E279F0}*/

                  }

             }

             /// <summary>

             /// 邮政编码

             /// </summary>

             public string PostCode

             {

                  get

                  {

                       /*Begin Template Expansion{9E37C07B-AD08-4891-A0CB-ABEB27BF572C}*/

                       return m_PostCode;         

                       /*End Template Expansion{9E37C07B-AD08-4891-A0CB-ABEB27BF572C}*/

                  }

                  set

                  {

                       /*Begin Template Expansion{EC19DC19-3BD5-4704-8224-4038010B084F}*/

                       m_PostCode = value;             

                       /*End Template Expansion{EC19DC19-3BD5-4704-8224-4038010B084F}*/

                  }

             }

     

             #endregion

     

             #region 重载数据代理对象属性

     

             /// <summary>

             /// 数据库操作的代理对象

             /// </summary>

             public override IProxy DataProxy

             {

                  get

                  {

                       if (base.DataProxy != null)

                           return base.DataProxy;

                       else

                           return new EOEmployeeProxy();

                  }

                  set

                  {

                       base.DataProxy = value;

                  }

             }

     

             #endregion

     

             #region 代理对象laze装载数据的属性

     

             /// <summary>

             /// 员工相片

             /// </summary>

             public byte[] Image

             {

                  get

                  {

                       if (this.m_Image != null)

                       {

                           return this.m_Image;

                       }

                       else

                       {

                           //如果没有装载图片数据,则从数据库装载图片信息

                           return ((EOEmployeeProxy)this.DataProxy).GetImageByID(this.ID );

                       }

                  }

             }

             /// <summary>

             /// 员工具有的角色集合

             /// </summary>

             public EORoleCollection Roles

             {

                  get

                  {

                       /*Begin Template Expansion{69E85C42-4011-4F11-B908-D2188E899524}*/

                 

                       /*End Template Expansion{69E85C42-4011-4F11-B908-D2188E899524}*/

                       if (this.m_Roles != null)

                       {

                           return m_Roles;   

                       }

                       else

                       {

                           return new EORoleCollection().Load(this.ID);

                       }

                               

                  }

             }

             /// <summary>

             /// 员工所在的工作组集合

             /// </summary>

             public EOWorkGroupCollection WorkGroups

             {

                  get

                  {

                       /*Begin Template Expansion{9A98A713-3C4A-4ED1-819E-CE7B6C78173B}*/

                       return m_WorkGroups;            

                       /*End Template Expansion{9A98A713-3C4A-4ED1-819E-CE7B6C78173B}*/

                       if (this.m_WorkGroups != null)

                       {

                           return m_WorkGroups;

                       }

                       else

                      {

                           return new EOWorkGroupCollection().Load(this.ID);

                       }

                  }

             }

     

             #endregion

     

             #endregion

     

             #region 构造函数

     

             public EOEmployee()

             {

             }

     

             #endregion

     

             #region 私有方法

     

             /// <summary>

             /// 部门的ID是否是合法的(是否存在这样的部门)

             /// </summary>

             /// <param name="departmentID">部门ID</param>

             /// <returns></returns>

             private bool IsExist(int departmentID)

             {

                  return new EODepartmentCollection().IsExist(departmentID);

             }

             /// <summary>

             /// 是否是合法的日期格式

             /// </summary>

             /// <param name="strDate"></param>

             /// <returns></returns>

             private bool IsCorrectDate(string strDate)

             {

                  try

                  {

                       DateTime result = Convert.ToDateTime(strDate);

                       return true;

                  }

                  catch

                  {

                       return false;

                  }

             }

             /// <summary>

             /// 是否是正确的电子信箱

             /// </summary>

             /// <param name="strEmail"></param>

             /// <returns></returns>

             private bool IsCorrectEmail(string strEmail)

             {

                  if (strEmail.IndexOf("@") > 0)

                  {

                       return true;

                  }

                  else

                  {

                       return false;

                  }

             }

             #endregion

     

             #region 公共方法

             /// <summary>

             /// 用户是否有某个角色

             /// </summary>

             /// <param name="roleID"></param>

             /// <returns></returns>

             public bool HasRole(int roleID)

             {

                  return ((EOEmployeeProxy)DataProxy).HasRole(this.ID,roleID);

             }

             //给添加角色

             public void AddRole(int roleID)

             {

                  ((EOEmployeeProxy)DataProxy).AddRole(this.ID,roleID);

                  this.IsDirty = true;

             }

             //删除用户的角色

             public void DeleteRole(int roleID)

             {

                  ((EOEmployeeProxy)DataProxy).DeleteRole(this.ID,roleID);

                  this.IsDirty = true;

             }

             #endregion

         }

     

         /// <summary>

         ///代表员工集合的对象

         /// </summary>

         public class EOEmployeeCollection : EOBaseCollection

         {

            

             #region 重载代理数据对象属性

     

             public override IProxy DataProxy

             {

                  get

                  {

                       if (base.DataProxy != null)

                       {

                           return base.DataProxy;

                       }

                       else

                       {

                           return new EOEmployeeProxy();

                       }

                  }

                  set

                  {

                       base.DataProxy = value;

                  }

             }

     

             #endregion

     

             #region 公共方法

             /// <summary>

             /// 从数据库装载某个部门的员工信息

             /// </summary>

             /// <param name="departmentID">员工所属部门ID</param>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public virtual  EOBaseCollection Load(int departmentID)

             {

                  return ((EOEmployeeProxy)this.DataProxy).Load(departmentID);

             }

             /// <summary>

             /// 按条件从数据库装载员工信息

             /// </summary>

             /// <param name="strWhere">Where条件语句</param>

             /// <param name="strOrderBy">Order by 语句</param>

             /// <returns>员工集合对象EOEmployeeCollection</returns>

             public virtual EOBaseCollection Load(string strWhere ,string strOrderBy)

             {

                  return ((EOEmployeeProxy)this.DataProxy).Load(strWhere,strOrderBy);

             }

             /// <summary>

             /// 从数据库装载某个部门的员工信息

             /// </summary>

             /// <param name="departmentID">员工所属部门ID</param>

             /// <returns>员工集合对象DataSet</returns>

             public virtual  DataSet ToDataSet(int departmentID)

             {

                  return ((EOEmployeeProxy)this.DataProxy).ToDataSet(departmentID);

             }

             /// <summary>

             /// 按条件从数据库装载员工信息

             /// </summary>

             /// <param name="strWhere">Where条件语句</param>

             /// <param name="strOrderBy">Order by 语句</param>

             /// <returns>员工集合对象DataSet</returns>

             public virtual DataSet ToDataSet(string strWhere ,string strOrderBy)

             {

                  return ((EOEmployeeProxy)this.DataProxy).ToDataSet(strWhere,strOrderBy);

             }

     

             #endregion

         }

     

    六、    自动生成代码机制的探讨

    A:存储过程部分代码的自动生成

     

    B:基础类库代码的自动生成

    七、    开发方法的风险评估

    优势:

    • 整个类库结构具有一致的接口,它们提高了易用性。
    • 开发人员所熟悉的启发式的通用面向对象编程 (OOP)/面向对象设计 (OOD),如设计模式和封装。
    • 作为一组类库,单独生成一个dotnet标准的DLL文件,对外提供统一的调用接口,既能在传统的“胖”客户机上,也能在脚本客户机上用统一的方式使用。
    • 类库内部各个层之间松散偶合,易于修改。
    • 容易做到跨数据库平台,或是跨其它的存储机制。
    • 直观的创建方式,使开发更快更容易。
    • 编码思路和风格一致,开发人员之间易于沟通,减少人员变动引起的潜在的风险。

    局限:

    • 技术方面未达到的要求,事物处理和海量数据处理引起的意外情况。
    • 工作量有可能增大。
    • 额外的成本

     

     

     

     

  • 相关阅读:
    AJAX注册
    文件上传加水印
    邮箱
    AJAX完整操作
    跨窗体操作
    容器布局
    EF异常类
    SQL查出字段横向拼接,如:1,2,3,4
    asp.net三层结构中,SQL助手类DbHelperSQL
    正则抓取页面信息
  • 原文地址:https://www.cnblogs.com/umlchina/p/12041.html
Copyright © 2020-2023  润新知