我正在与一家中型公司合作,主要致力于编写与其ERP系统交互的自定义应用程序。这是我第一次做这种工作,所以ERP概念对我来说是新的,我正在学习它的一餐。
到目前为止,我只编写了两个应用程序并且学习了数据库模型,因为我只需要完成工作所需的数据,但即使数量有限,我也可以开始看到形成一幅大图。我的想法是编写一个库,其中存储了所有映射/模型对象,以便新应用程序可以引用此库。之后,每个应用程序将创建自己的存储库,限制只访问他们需要的内容和有意义的透视图。
我遇到的问题是如何处理(N)Hibernate映射中的关系。如果我有一个在这个基础库中映射完整关系的订单对象,那么就没有什么可以阻止某人永远地离开这些关系了(授予我是唯一的程序员......)。因此,在这种意义上,使用存储库作为一种范围的限制根本不起作用。
如果我限制此订单对象的(N)Hibernate映射中的关系,则Repository返回一个订单对象,该订单对象仅与其范围所需的关系绑定。缺点是我现在必须为每个项目创建映射,而不是只有一个“映射存储”。
其他人如何应对此事?
有点无关,但我也一直在翻译(N)Hibernate持久化对象,这些对象可能包含几种关系,形成一种更适合特定应用的单一非持久化对象(通常更受其影响) UI)。这是一个常见的事情,还是我通过获取返回的对象并将它们转换为其他东西来抛弃(N)Hibernate的一些好处?
PS。关于DDD标签......我不知道这是DDD详细解决的问题,但我确实订购了这本书。在书到来之前,我不确定要看好的资源。
答案 0 :(得分:1)
很老的问题。我猜你已经找到了答案,但万一......
我看到两种解决问题的方法。
通过数据库中的用户帐户限制表访问。例如在mysql中,你可以这样做。缺点是如果你的所有域类都在你的nh dll中映射和编译,程序员仍然可以看到这些实体。如果他/她试图访问它,它将触发异常(nh尝试访问数据库表,数据库拒绝)。
为每个案例创建一个dll。但我想你也可能需要创建几个帐户。