JiveJdon Community Forums
在线233人 Home | 论坛 | 培训咨询 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 4 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
mweix

发表文章: 2
注册时间: 2008年03月11日 16:32
给他发消息
请教各位前辈 Flex+Ejb3.0 发表: 2008年03月15日 17:19 回复
各位前辈:
小弟刚刚注册jdon,几天浏览下来被深深震撼,一直自以为的面向对象编程原来并没有完全脱离面向过程的思维方式...
最近在做一个权限模块,很多问题想不通,希望banq老师和各位前辈不吝赐教!

Domain Model:
Person(员工),User(用户),Role(角色),Function(功能),Module(模块)
需求:
某员工的用户所属的角色的功能在一定范围下生效(员工A是管理员,但只是某厂区的管理员),角色,模块,功能是确定的.
问题...
角色生效的条件(厂区),现在我是把条件都加在了用户与角色的中间表中,用户(List<用户实例>)-用户实例(用户,角色,List<厂区>)-角色,这样每次Flex终端调用我的服务(stateless SessionBean)的时候,我都从安全域获取当前登录帐号,然后查找User...最终得到角色的限定范围并将其翻译成sql条件(and factory.id in ..)通过拦截器修改服务将执行的sql以达到角色只能查询其作用范围下数据的目的(sorry,这句好长...),其他的操作也都这样,还有的方法执行後拦截筛选结果...

单纯的为了实现,好像谈不上什么设计,设计模式我看过,但总是不知道怎么用,请各位前辈指教,上面那些东东能否应用设计模式(肯定能...),应该怎么用,非常感谢

(不知道各位看没看懂我的描述...)

flex

发表文章: 1
注册时间: 2008年03月17日 11:10
给他发消息
re:请教各位前辈 Flex+Ejb3.0 发表: 2008年03月17日 11:11 回复
晕,文不对题!被骗进来了
banq

发表文章: 9074
注册时间: 2002年08月03日 17:08
给他发消息
回复:请教各位前辈 Flex+Ejb3.0 发表: 2008年03月17日 21:40 回复
使用设计模式,就是使用对象,对象和数据库是有你没我,水火不容,将你案例中sql实现部分转化为对象实现,进行不同级别的对象组合和过滤。
mweix

发表文章: 2
注册时间: 2008年03月11日 16:32
给他发消息
回复:回复:请教各位前辈 Flex+Ejb3.0 发表: 2008年03月18日 14:09 回复
不太明白...
我用的EJB QL对象查询语言, 操作的都是对象啊...我不明白的是,按道理说权限部分应该和业务分离开,但是我现在分离不开,对象的很多属性就是为了权限范围控制而设置的,业务实现和权限不能够分开写,耦合在一起了,老师能说的再具体点不
banq

发表文章: 9074
注册时间: 2002年08月03日 17:08
给他发消息
回复:回复:回复:请教各位前辈 Flex+Ejb3.0 发表: 2008年03月19日 14:57 回复
借助最近一篇文章"使用Java实现内部领域特定语言"中例子,举例如下:

使用QL系列,无论HQL还是EJB QL等,如下:
String sql = "select id, name " +
"from customers c, order o " +
"where " +
"c.since >= sysdate - 30 and " +
"sum(o.total) > " + significantTotal + " and " +
"c.id = o.customer_id and " +
"nvl(c.status, 'DROPPED') != 'DROPPED'";

而使用面向业务对象化概念,也就是DSL,则如下:
Table o = ORDER.alias();
Clause recent = c.SINCE.laterThan(daysEarlier(30));
Clause hasSignificantOrders = o.TOTAT.sum().isAbove(significantTotal);
Clause ordersMatch = c.ID.matches(o.CUSTOMER_ID);
Clause activeCustomer = c.STATUS.isNotNullOr("DROPPED");

String sql = CUSTOMERS.where(recent.and(hasSignificantOrders)
.and(ordersMatch).and(activeCustomer).select(c.ID, c.NAME) .sql();

使用Java实现内部领域特定语言
这个主题有 4 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com

anti spam