为了适应需求,要灵活地组合出新的商业逻辑,
如何合并多个类,生成一个新类?比如把,
class ItemMasterBLL() { DataTable GetItemList(); DataRow GetItemInfo(); bool DeleteItem(); }
class UnitMasterBLL() { DataTable GetUnitList(); DataRow GetUnitInfo(); bool DeleteUnit(); }
class VendorMasterBLL() { DataTable GetVendorList(); DataRow GetVendorInfo(); bool DeleteVendor(); }
合并成(要合并的这几个类没有重复的成员):
class ItemManagementBLL()
{
//
DataTable GetItemList();
DataRow GetItemInfo();
bool DeleteItem();
//
DataTable GetUnitList();
DataRow GetUnitInfo();
bool DeleteUnit();
//
DataTable GetVendorList();
DataRow GetVendorInfo();
bool DeleteVendor();
}
但原有类仍需正常使用。问题是类只能单个继承,不然就不存在此问题了:
class ItemManagementBLL() : ItemMasterBLL, ItemTypeBLL, UnitMasterBLL
class OrderManagementBLL() : OrderBillBLL, CustomerMasterBLL, ItemMasterBLL, CurrencyMasterBLL, UnitMasterBLL
搞软件的一般都有“偷懒”的思想,想改了基类,合并类不需做任何改动而自动跟着变。
现在只想到用反射的方法在一个小程序中生成合并类的代码文本(如下),并手工贴到工程代码中:
class ItemManagementBLL()
{
//
ItemMasterBLL itemMasterBLL= new ItemMasterBLL();
DataTable GetItemList() { return itemMasterBLL.GetItemList(); }
DataRow GetItemInfo() { return itemMasterBLL.GetItemInfo(); }
bool DeleteItem() { return itemMasterBLL.DeleteItem(); }
//
UnitMasterBLL UnitMasterBLL= new UnitMasterBLL();
DataTable GetUnitList() { return UnitMasterBLL.GetUnitList(); }
DataRow GetUnitInfo() { return UnitMasterBLL.GetUnitInfo(); }
bool DeleteUnit() { return UnitMasterBLL.DeleteUnit(); }
//
VendorMasterBLL VendorMasterBLL= new VendorMasterBLL();
DataTable GetVendorList() { return VendorMasterBLL.GetVendorList(); }
DataRow GetVendorInfo() { return VendorMasterBLL.GetVendorInfo(); }
bool DeleteVendor() { return VendorMasterBLL.DeleteVendor(); }
}
如何合并多个类,生成一个新类?比如把,
class ItemMasterBLL() { DataTable GetItemList(); DataRow GetItemInfo(); bool DeleteItem(); }
class UnitMasterBLL() { DataTable GetUnitList(); DataRow GetUnitInfo(); bool DeleteUnit(); }
class VendorMasterBLL() { DataTable GetVendorList(); DataRow GetVendorInfo(); bool DeleteVendor(); }
合并成(要合并的这几个类没有重复的成员):
class ItemManagementBLL()
{
//
DataTable GetItemList();
DataRow GetItemInfo();
bool DeleteItem();
//
DataTable GetUnitList();
DataRow GetUnitInfo();
bool DeleteUnit();
//
DataTable GetVendorList();
DataRow GetVendorInfo();
bool DeleteVendor();
}
但原有类仍需正常使用。问题是类只能单个继承,不然就不存在此问题了:
class ItemManagementBLL() : ItemMasterBLL, ItemTypeBLL, UnitMasterBLL
class OrderManagementBLL() : OrderBillBLL, CustomerMasterBLL, ItemMasterBLL, CurrencyMasterBLL, UnitMasterBLL
搞软件的一般都有“偷懒”的思想,想改了基类,合并类不需做任何改动而自动跟着变。
现在只想到用反射的方法在一个小程序中生成合并类的代码文本(如下),并手工贴到工程代码中:
class ItemManagementBLL()
{
//
ItemMasterBLL itemMasterBLL= new ItemMasterBLL();
DataTable GetItemList() { return itemMasterBLL.GetItemList(); }
DataRow GetItemInfo() { return itemMasterBLL.GetItemInfo(); }
bool DeleteItem() { return itemMasterBLL.DeleteItem(); }
//
UnitMasterBLL UnitMasterBLL= new UnitMasterBLL();
DataTable GetUnitList() { return UnitMasterBLL.GetUnitList(); }
DataRow GetUnitInfo() { return UnitMasterBLL.GetUnitInfo(); }
bool DeleteUnit() { return UnitMasterBLL.DeleteUnit(); }
//
VendorMasterBLL VendorMasterBLL= new VendorMasterBLL();
DataTable GetVendorList() { return VendorMasterBLL.GetVendorList(); }
DataRow GetVendorInfo() { return VendorMasterBLL.GetVendorInfo(); }
bool DeleteVendor() { return VendorMasterBLL.DeleteVendor(); }
}
解决方案 »
- C# winform 一窗体的操作记录显示在另一个窗体,为什么显示不了?
- 获得焦点
- 一个简单打印的问题!急!
- 大家看下这两个计数器那个的效率要高些......(如果有更好的请贴出来)
- 我想做outlook中的联系人与我们的软件同步
- 日文操作系统下,可否装一套日文的.net studio及日文的framework,同时装一套中文的.net studio及中文的framework
- 读取 EXCEL 文件时同一列在读取了数字后,再读同列的字符就是为空.请问怎样避免?
- 用MD5 算法加密完的明文一定都是32位吗?
- 那位多线程高手看看我的程序为什么得不到我预想的结果!
- 请教一个枚举方面的问题,在线等,各位大大好心来看看啊
- 日期如何按月份循环
- c# 如何编写平方与开平方(help)
public partial Project1BLL
{
DataTable GetItemList(){}
DataRow GetItemInfo(){}
bool DeleteItem(){}
}//UnitBLL.cs
public partial Project1BLL
{
DataTable GetUnitList(){}
DataRow GetUnitInfo(){}
bool DeleteUnit(){}
}但后面发现把整个项目需要的东东合部写在一个类中,太宠大了吧。如果分别散开的话,操作又很麻烦:
class OrderForm()
{
OrderBillBLL ordBLL = new OrderBillBLL ();
CustomerMasterBLL custBLL = new CustomerMasterBLL ();
ItemMasterBLL itemBLL = new ItemMasterBLL ();
public OrderForm(){}
}
class ItemMasterBLL:IItemMaster
class UnitMasterBLL:IUnitMaster
class VendorMasterBLL:IVendorMaster class C:IItemMaster,IUnitMaster,IVendorMaster
{
private ItemMasterBLL _sItem;
private UnitMasterBLL _sUnit;
private VendorMasterBLL _sVendor; #region IItemMaster的接口函数
public DataTable GetItemList(){return _sItme.GetItemList();}
public DataRow GetItemInfo(){return _sItem.GetItemInfo();}
public bool DeleteItem(){return _sItem.DeleteItem();}
#endregion
//剩下的一样 代理一下就可以了
}
class C:IItemMaster,IUnitMaster,IVendorMaster
{
private ItemMasterAdapter _sItem;
#region IItemMaster的接口函数
public DataTable GetItemList(){return _sItme.GetItemList();}
public DataRow GetItemInfo(){return _sItem.GetItemInfo();}
public bool DeleteItem(){return _sItem.DeleteItem();}
#endregion
}
2楼说的不但没简化,反而多了个约束(接口)。--------------------------------------------------------------
>>按特性合理的分类。
>>合理的继承。但要保证类之间的关联降到最低(低耦合)
>>不主张一个项目一个类,包罗万象的做法很难维护。
此贴就是想问怎么解决如上问题。
MasterManagement、 SalesManagement、 InventoryManagement等都会用到 IItem(或ItemDAL).GetItemInfo()方法,不知怎么把这些公共方法提供到最后的BLL中最合适。--------------------------------------------------------------
如果合到静态类中,
public class ItemManagementBLL()
{
public static ItemMasterBLL item = new ItemMasterBLL();
public static UnitMasterBLL unit = new UnitMasterBLL();
public static VendorMasterBLL vendor = new VendorMasterBLL();
}这样调用也太麻烦了,至少多了顶“ItemManagementBLL.”帽子:
private DoIt()
{
DataTable dt = ItemManagementBLL.item.GetItemList();
}--------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Class3 test = new Class3();
test.F1F();
test.F2F();
Console.ReadKey();
}
}
}namespace ConsoleApplication3
{
public class Class1
{
public void F1F()
{
Console.Out.WriteLine("F1");
}
}
}namespace ConsoleApplication3
{
public class Class2
{
public void F2F()
{
Console.Out.WriteLine("F2");
}
}
}
namespace ConsoleApplication3
{
public class Class3
{
Class1 FF1;
Class2 FF2;
public Class3()
{
this.FF1 = new Class1();
this.FF2 = new Class2();
}
public void F1F()
{
this.FF1.F1F();
}
public void F2F()
{
this.FF2.F2F();
}
}
}
即在SalesOrderBll模块中加成员来分别实例化ItemBll、UnitBll、CurrencyBll、CustomerBll、EmployerBll、UserBll、...(一大堆)
{
public class Class3
{ private Class1 _FF1 = null;
public Class1 FF1
{
get
{
if (_FF1==null) _FF1 = new Class1();
return _FF1;
}
} private Class2 _FF2 = null;
public Class1 FF2
{
get
{
if (_FF2==null) _FF2 = new Class2();
return _FF2;
}
} public Class3()
{
} public void F1F()
{
this.FF1.F1F();
}
public void F2F()
{
this.FF2.F2F();
}
}
}