这个问题用oo思想怎么解决?

neuhawk 2003-08-28 09:54:01
在实际开发中,不同的用户关心的数据不一样,比如经理和工程师,他们对同一张表看到
的界面就不一样。所以要实现这个功能:动态增加模版。
以前的项目中,我们是这么做的。
A,B,C...业务数据表:数据表
H表:保存A,B,C...表的表名,字段名,中文名称,是否显示,显示风格等很多东西。

这样,通过resultset.getXXXX(YYYY)来获得A,B,C...的数据值,其中,YYY保存在H表中。

这样,做成一个通用的javabean,返回要显示string。
/////这样做还有个好处,增加字段不需要改变源代码。

如果我现在我不用jdbc,而用O/R Mapping的东西,比如hibernate.
查询结果放到list中,其中list保存是对象。
比如Cat。
public class Cat {
private String id;
private String name;
private char sex;
private float weight;
.....................//getXXX(),setXXX()
}
要获得Cat 的名字,只能
name=cat.getName;
这样一来,我就很难做到用户能随意增加(显示)模版了。

大家有什么好的方法么?
只能想DAO一样,(一个表对应一个DAO),一个表对应一个javabean。

呵呵,维护起来也不方便阿。
...全文
70 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeffyan77 2003-09-09
  • 打赏
  • 举报
回复
一个软件部件提供一项服务,叫做provider,一个软件部件消费这项服务,叫做consumer,client或客户端。

我不是说你公司的客户。
schwarzenegger 2003-09-09
  • 打赏
  • 举报
回复
jokerjava 2003-09-05
  • 打赏
  • 举报
回复
如果要动态 不能这么命名对象吧
用反射枚举字段
搂主好像自己已经解决问题了
znjq1001 2003-09-02
  • 打赏
  • 举报
回复
用xml来实现好像比较好
znjq1001 2003-09-02
  • 打赏
  • 举报
回复
关注一下
netcobol 2003-09-02
  • 打赏
  • 举报
回复
你可以参考《ejb模式》中的General Attribute Access 和 Data Access Command Bean
你一定收益不少,这里可能要用到DTO中HashMap 模式。
neuhawk 2003-08-31
  • 打赏
  • 举报
回复
动态属性是经常需要的哦。
xiaoliuzi 2003-08-31
  • 打赏
  • 举报
回复
up
neuhawk 2003-08-30
  • 打赏
  • 举报
回复
用apache的开源项目commons,

.......................
BeanMap是个很有意思的Map,它利用java Bean的属性反射功能,把一个Java Bean变成一个Map来操作,例如一个具有name属性的Bean 构造的BeanMap,可以使用beanMap.get("name")得到bean的name属性值。
........................

呵呵,跟jdbc的resultset的rs.getXXX(一样了)。
ESoftWind 2003-08-30
  • 打赏
  • 举报
回复
所谓测量模式即通常意义的动态属性。最经典的例子是医疗管理系统

具体说明比较繁琐,好象在《分析模式》书中有详细介绍。我找到后再回帖
littlecpu 2003-08-29
  • 打赏
  • 举报
回复
找一个鸡,掏点钱让她O O yeah地叫一叫,记得录音,回来与大家分享
ESoftWind 2003-08-29
  • 打赏
  • 举报
回复
Measurement Pattern(测量模式)

可以解决此问题
neuhawk 2003-08-29
  • 打赏
  • 举报
回复
客户也需要学会编程?
像中国的中小企业,一般是有1-2个网络管理员,让他们也学会编程吗。
不如做个页面,让他们通过这个页面去随意改变显示模版。
jeffyan77 2003-08-29
  • 打赏
  • 举报
回复
在他们的package里面声明一个接口,比如就是EmployeeNarrowIF,然后在你的package里的Employee类中实现这个接口。

如果有一天他们需要多一个性质或者方法(我们暂时假定这是Employee类已经有的),他们可以自行修改这个接口(当然需要你告诉他们性质的名字、数据类型,方法的特征等等)。如果他们改得不对,就无法编译通过。

这就好比数据库的那个例子里面,DBA会维护Employee表,程序员维护那几个View。如果程序需要修改View,增加几列,那仅仅是程序员修改View的问题。不要在表的level解决这个问题。
neuhawk 2003-08-29
  • 打赏
  • 举报
回复
ESoftWind() :能介绍一下么。
neuhawk 2003-08-28
  • 打赏
  • 举报
回复
但是,用户需要看到什么数据,只有实施才知道,而且,他们也是经常要求增加字段或修改字段,
这样一来得改源代码,很麻烦阿。
想显示的名称(比如,姓名,性别等)是不是用XML更好呢?

像下拉框的内容,用户也需要能随时修改(我们叫数字字典)。
jeffyan77 2003-08-28
  • 打赏
  • 举报
回复
在这种情况下,我一般倾向于创建固定的接口给不同的用户。

interface EmployeeIF{
String getName();
}

interface EmployeeNarrowIF implements EmployeeIF{
String getDept();
}

interface EmployeeWideIF implements EmployeeIF{
String getDept();
String getSalary();
}

在关联数据库中,一个表会有很多列,有一些列是公开的,有一些是保密的。一个通畅的做法,就是创建两个view,分别提供表中的不同列。将公开信息放到一个view中,将保密信息放到另一个列中。

对友确定权限的用户提供不同的view。

在OO设计中,这叫做Interface Segregation。
neuhawk 2003-08-28
  • 打赏
  • 举报
回复
up

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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