2008-12-17 88 views
0

我开始与一家中等规模的公司合作,主要致力于编写与其ERP系统交互的定制应用程序。这是我第一次做这样的工作,所以ERP概念对我来说是新的,我正在学习它的零食。(N)休眠:与关系的核心/主映射

到目前为止,我只写了两个应用程序,并且已经学会了数据库模型,只有尽我所需完成工作,但即使数量有限,我也可以开始看到一个大的图像形成。然后,我的想法是编写一个库,其中存储了所有映射/模型对象,以便新应用程序可以引用此库。之后,每个应用程序将创建自己的存储库,从而仅限于访问他们需要的内容以及有意义的观点。

我遇到的问题是如何处理(N)Hibernate映射中的关系。如果我有一个在这个基础库中映射完整关系的订单对象,那么没有任何东西阻止某人永远旅行这些关系(只有我是唯一的程序员......)。因此,使用存储库作为范围的一种限制在这个意义上根本不起作用。

如果相反,我限制此订单对象在(N)Hibernate映射中的关系,则存储库将返回一个仅与其范围所需关系绑定的订单对象。缺点是我现在必须为每个项目创建映射,而不是有一个“映射存储”。

其他人如何处理这个问题?

一种无关的,但我也一直在翻译(N)Hibernate持久对象,可能包含几个关系成一种单非持久对象更适合特定的应用程序(通常受到更多的影响UI)。这是一件常见的事情,还是我将(N)Hibernate的一些好处带回去,将返回的对象和它们翻译成其他东西?

ps。关于DDD标签...我不知道这是否是DDD详细描述的内容,但我确实订购了该书。尽管如此,我不确定是否有很好的资源可供阅读。

回答

1

很老的问题。我想你已经找到了答案,但万一......

我看到解决你的问题的两种方法。

  1. 通过数据库中的用户帐户限制表访问。例如在mysql中,你可以这样做。缺点是如果所有的域类都被映射并编译到你的DLL中,程序员仍然可以看到这些实体。如果他/她试图访问它,它将触发一个异常(nh尝试访问数据库表,数据库拒绝)。

  2. 为每个案例创建一个dll。但我想你也可能需要创建几个帐户。