有几个实体的操作相似,并且实体结构也差不多,如何可以达到复用
例如class A
{
public Guid ID;
public string Name_A;
}
class B
{
public Guid ID;
public string Name_B;
}
界面中有几个方法
Show();
Insert();
Select();
这几个方法中操作原理都一样就是对上面类似的实体进行操作,我想通过某个机制传入一个参数,就可以实现通用,不想对A进行写一套方法,又对B写一套方法,求思路
C# 重构 反射 class --------------------编程问答-------------------- 共通的提取出来 通过继承啊 --------------------编程问答-------------------- a b都继承c.
一套方法对c用.ab也可以用. --------------------编程问答-------------------- 抽象,继承,接口 --------------------编程问答-------------------- Show();
Insert();
Select();
这方法你封装到一个类中AbstractSqlDAL<T>
你操作的类,实现这个父类,
T 传入你要操作的实际类型,就是泛型 --------------------编程问答-------------------- 接口,抽象类,虚方法,应该都可以达到你要的效果 --------------------编程问答-------------------- 以上几种都可以 --------------------编程问答-------------------- 难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类
难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面
难点三: 下拉框中的类有名称一样的,也有名称不一样的,但是对应的表结构类似就是列名字不一样,例如有共同的变量名称叫ID,有不同名称叫Name_XX
难点四: 这些类的基类我是不能修改的
说明一样我要实现的功能,有做过管理系统的应该清楚一些:
现有数据角色列表,要根据不同的数据角色去设置一些权限管理,
例如 设置数据角色和部门的权限管理,设置数据角色和帐套的权限管理,设置数据角色和表单权限的管理,
在数据库中保存只是表名字不一样但是,表结构都差不多 ID,DataRoleID,xxxID,现在想达到公用一套界面的效果。 --------------------编程问答-------------------- class c
{
}
class a:c
{
}
class b:c
{}
class do
{
private c myc;
int type;
do(c oc,int type)
{
myc=new c;
myc.=oc.//用oc初始化myc
this.type=type;
}
public insert()
{
case (type)
}
public show()
{
case (type)
}
public Select()
{
case (type)
}
}
main()
{
c ob=new b();
c oc=new a();
do dowork=new do(ob,0);
do doworka=new do(oc,1);
dowork.
dowork2.
}
大概像这个样子 --------------------编程问答-------------------- 简单工厂模式就可以了,或者是策略模式,加上反射。 --------------------编程问答-------------------- LZ是不想每个类都去实现insert show select这几个方法的吧 是这个意思吧? --------------------编程问答-------------------- 看到比较BT的需求就需要BT的设计啊 --------------------编程问答--------------------
为什么这些实体类的基类你不能修改?实体类都是自定义的类型,你统一添加个基类或接口,有何不可? --------------------编程问答--------------------
项目比较复杂,Nhibernate+wcf构建,考虑考虑怎么给包装一下 --------------------编程问答--------------------
wcf不是难点,关键是Nhibernate,我也不会Nhibernate,因此不知道它对实体类有什么要求,如果要求苛刻,就换一个,我是自己用Dapper封装的,完全满足自己的实际需求。 --------------------编程问答-------------------- 这个窗体代码有 2500多行,现在类型还是固定的,其中的逻辑复杂度可以想象一下 --------------------编程问答--------------------
这需求不变态啊.
你的代码几千行是因为设计的不够灵活.就像你说的有很多类似的重复.
只能重写了. --------------------编程问答-------------------- 用4楼的泛型 千万不要用8楼的方法
另外对于简单的增删改查 我是用codesmith自己写模版 生成的~ --------------------编程问答-------------------- class A
{
public Guid ID;
public string Name_A;
}
class B
{
public Guid ID;
public string Name_B;
}
如果ab真像你说的这样.结构类型一样.变量名不同.
那直接把B删了.所有用B的地方都替换成A. --------------------编程问答--------------------
我现在有现成的 数据角色人员设置界面,那么我只需要将代码复制一份,然后将涉及到人员的变量改为部门类型的相关系列变量一编译,那一个新鲜的数据角色部门设置界面就出来了,但是现在这些业务想通过一个窗体来实现。 --------------------编程问答-------------------- 基本相同的就用泛型吧,不同的地方还是得重新写啊,技术上实现有难度就从业务上改 --------------------编程问答-------------------- 自己已经搞定,并且效果和操作都非常好用,通过反射+代理来实现。 --------------------编程问答-------------------- 呵呵,最简单的ORM
补充:.NET技术 , C#