|
这个主题共有 4 回复 / 1 页 [
]
|
|
|
|
|
|
请教各位前辈 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,这句好长...),其他的操作也都这样,还有的方法执行後拦截筛选结果... 单纯的为了实现,好像谈不上什么设计,设计模式我看过,但总是不知道怎么用,请各位前辈指教,上面那些东东能否应用设计模式(肯定能...),应该怎么用,非常感谢
(不知道各位看没看懂我的描述...)
|
|
|
|
|
|
re:请教各位前辈 Flex+Ejb3.0
|
发表: 2008年03月17日 11:11
|
回复
|
|
|
|
|
|
|
|
回复:请教各位前辈 Flex+Ejb3.0
|
发表: 2008年03月17日 21:40
|
回复
|
|
|
使用设计模式,就是使用对象,对象和数据库是有你没我,水火不容,将你案例中sql实现部分转化为对象实现,进行不同级别的对象组合和过滤。
|
|
|
|
|
|
回复:回复:请教各位前辈 Flex+Ejb3.0
|
发表: 2008年03月18日 14:09
|
回复
|
|
不太明白... 我用的EJB QL对象查询语言, 操作的都是对象啊...我不明白的是,按道理说权限部分应该和业务分离开,但是我现在分离不开,对象的很多属性就是为了权限范围控制而设置的,业务实现和权限不能够分开写,耦合在一起了,老师能说的再具体点不
|
|
|
|
|
|
回复:回复:回复:请教各位前辈 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实现内部领域特定语言
|
|
|
|