当前位置:编程学习 > C#/ASP.NET >>

有几个实体的操作相似,并且实体结构也差不多,如何可以达到复用

例如
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.
}
大概像这个样子 --------------------编程问答-------------------- 简单工厂模式就可以了,或者是策略模式,加上反射。 --------------------编程问答--------------------
引用 5 楼 nice_fish 的回复:
接口,抽象类,虚方法,应该都可以达到你要的效果
LZ是不想每个类都去实现insert show select这几个方法的吧 是这个意思吧? --------------------编程问答-------------------- 看到比较BT的需求就需要BT的设计啊 --------------------编程问答--------------------
引用 7 楼 happyer_longlong 的回复:
难点四: 这些类的基类我是不能修改的

为什么这些实体类的基类你不能修改?实体类都是自定义的类型,你统一添加个基类或接口,有何不可? --------------------编程问答--------------------
引用 12 楼 qldsrx 的回复:
引用 7 楼 happyer_longlong 的回复:
难点四: 这些类的基类我是不能修改的
为什么这些实体类的基类你不能修改?实体类都是自定义的类型,你统一添加个基类或接口,有何不可?

项目比较复杂,Nhibernate+wcf构建,考虑考虑怎么给包装一下 --------------------编程问答--------------------
引用 13 楼 happyer_longlong 的回复:
项目比较复杂,Nhibernate+wcf构建,考虑考虑怎么给包装一下

wcf不是难点,关键是Nhibernate,我也不会Nhibernate,因此不知道它对实体类有什么要求,如果要求苛刻,就换一个,我是自己用Dapper封装的,完全满足自己的实际需求。 --------------------编程问答-------------------- 这个窗体代码有 2500多行,现在类型还是固定的,其中的逻辑复杂度可以想象一下 --------------------编程问答--------------------
引用 7 楼 happyer_longlong 的回复:
难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类
难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面
难点三: 下拉框中的类有名称一样的,也有名称不一样的,但是对应的表结构类似就是列……

这需求不变态啊.
你的代码几千行是因为设计的不够灵活.就像你说的有很多类似的重复.
只能重写了. --------------------编程问答-------------------- 用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. --------------------编程问答--------------------
引用 16 楼 autoid1 的回复:
引用 7 楼 happyer_longlong 的回复:
难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类
难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面
难点三: 下拉框中的类有名称一样的,也有名称不……

我现在有现成的 数据角色人员设置界面,那么我只需要将代码复制一份,然后将涉及到人员的变量改为部门类型的相关系列变量一编译,那一个新鲜的数据角色部门设置界面就出来了,但是现在这些业务想通过一个窗体来实现。 --------------------编程问答-------------------- 基本相同的就用泛型吧,不同的地方还是得重新写啊,技术上实现有难度就从业务上改 --------------------编程问答-------------------- 自己已经搞定,并且效果和操作都非常好用,通过反射+代理来实现。 --------------------编程问答-------------------- 呵呵,最简单的ORM
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,