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

happyer_longlong 2013-03-07 09:46:51
例如
class A
{
public Guid ID;
public string Name_A;
}
class B
{
public Guid ID;
public string Name_B;
}

界面中有几个方法
Show();
Insert();
Select();
这几个方法中操作原理都一样就是对上面类似的实体进行操作,我想通过某个机制传入一个参数,就可以实现通用,不想对A进行写一套方法,又对B写一套方法,求思路
...全文
321 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
happyer_longlong 2014-10-23
  • 打赏
  • 举报
回复
已经自己解决,反射+代理搞定
jxwangjm 2013-03-17
  • 打赏
  • 举报
回复
呵呵,最简单的ORM
happyer_longlong 2013-03-17
  • 打赏
  • 举报
回复
自己已经搞定,并且效果和操作都非常好用,通过反射+代理来实现。
happyer_longlong 2013-03-07
  • 打赏
  • 举报
回复
引用 16 楼 autoid1 的回复:
引用 7 楼 happyer_longlong 的回复: 难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类 难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面 难点三: 下拉框中的类有名称一样的,也有名称不……
我现在有现成的 数据角色人员设置界面,那么我只需要将代码复制一份,然后将涉及到人员的变量改为部门类型的相关系列变量一编译,那一个新鲜的数据角色部门设置界面就出来了,但是现在这些业务想通过一个窗体来实现。
autoid1 2013-03-07
  • 打赏
  • 举报
回复
class A { public Guid ID; public string Name_A; } class B { public Guid ID; public string Name_B; } 如果ab真像你说的这样.结构类型一样.变量名不同. 那直接把B删了.所有用B的地方都替换成A.
moonwrite 2013-03-07
  • 打赏
  • 举报
回复
用4楼的泛型 千万不要用8楼的方法 另外对于简单的增删改查 我是用codesmith自己写模版 生成的~
autoid1 2013-03-07
  • 打赏
  • 举报
回复
引用 7 楼 happyer_longlong 的回复:
难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类 难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面 难点三: 下拉框中的类有名称一样的,也有名称不一样的,但是对应的表结构类似就是列……
这需求不变态啊. 你的代码几千行是因为设计的不够灵活.就像你说的有很多类似的重复. 只能重写了.
happyer_longlong 2013-03-07
  • 打赏
  • 举报
回复
这个窗体代码有 2500多行,现在类型还是固定的,其中的逻辑复杂度可以想象一下
qldsrx 2013-03-07
  • 打赏
  • 举报
回复
引用 13 楼 happyer_longlong 的回复:
项目比较复杂,Nhibernate+wcf构建,考虑考虑怎么给包装一下
wcf不是难点,关键是Nhibernate,我也不会Nhibernate,因此不知道它对实体类有什么要求,如果要求苛刻,就换一个,我是自己用Dapper封装的,完全满足自己的实际需求。
happyer_longlong 2013-03-07
  • 打赏
  • 举报
回复
引用 12 楼 qldsrx 的回复:
引用 7 楼 happyer_longlong 的回复: 难点四: 这些类的基类我是不能修改的 为什么这些实体类的基类你不能修改?实体类都是自定义的类型,你统一添加个基类或接口,有何不可?
项目比较复杂,Nhibernate+wcf构建,考虑考虑怎么给包装一下
qldsrx 2013-03-07
  • 打赏
  • 举报
回复
引用 7 楼 happyer_longlong 的回复:
难点四: 这些类的基类我是不能修改的
为什么这些实体类的基类你不能修改?实体类都是自定义的类型,你统一添加个基类或接口,有何不可?
happyer_longlong 2013-03-07
  • 打赏
  • 举报
回复
看到比较BT的需求就需要BT的设计啊
CAINIAOXIANGFEI 2013-03-07
  • 打赏
  • 举报
回复
引用 5 楼 nice_fish 的回复:
接口,抽象类,虚方法,应该都可以达到你要的效果
LZ是不想每个类都去实现insert show select这几个方法的吧 是这个意思吧?
CAINIAOXIANGFEI 2013-03-07
  • 打赏
  • 举报
回复
简单工厂模式就可以了,或者是策略模式,加上反射。
CAINIAOXIANGFEI 2013-03-07
  • 打赏
  • 举报
回复
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. } 大概像这个样子
happyer_longlong 2013-03-07
  • 打赏
  • 举报
回复
难点一: 在同一个界面中我有个下拉框,下拉框中选择一个类名称,通过选中的选项去实例化相应的类 难点二: 在这个操作界面中 定义有一些成员变量,之前这些变量是固定的,例如 List<A> m_ListA,但是现在要根据选择的类来改变这些变量的类型,我考虑看能不能将这些变量提升到具体的类里面 难点三: 下拉框中的类有名称一样的,也有名称不一样的,但是对应的表结构类似就是列名字不一样,例如有共同的变量名称叫ID,有不同名称叫Name_XX 难点四: 这些类的基类我是不能修改的 说明一样我要实现的功能,有做过管理系统的应该清楚一些: 现有数据角色列表,要根据不同的数据角色去设置一些权限管理, 例如 设置数据角色和部门的权限管理,设置数据角色和帐套的权限管理,设置数据角色和表单权限的管理, 在数据库中保存只是表名字不一样但是,表结构都差不多 ID,DataRoleID,xxxID,现在想达到公用一套界面的效果。
cjh200102 2013-03-07
  • 打赏
  • 举报
回复
以上几种都可以
  • 打赏
  • 举报
回复
接口,抽象类,虚方法,应该都可以达到你要的效果
  • 打赏
  • 举报
回复
Show(); Insert(); Select(); 这方法你封装到一个类中AbstractSqlDAL<T> 你操作的类,实现这个父类, T 传入你要操作的实际类型,就是泛型
黄瓜黄瓜 2013-03-07
  • 打赏
  • 举报
回复
抽象,继承,接口
加载更多回复(3)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧