2

我和我的团队正在开发一个 ERP 系统,它有很多模块(人力资源、会计等)

我们面临的问题是两个模块(人力资源,会计)之间有一些共享实体,比如员工

人力资源系统中的员工有很多细节,例如:

Personal Information , Visa Info , Report To  , Sources , Training , Etc 

会计员工几乎没有信息

Personal Information , Bank Account , Employee Account (That's it )

1)假设每个模块都将作为独立版本工作(此完成)

2)假设两个模块将一起工作,这意味着员工将反映在两个模块中,即使他们在每个系统中有不同的流程

当我在 HR 模块中定义新员工以让会计模块感受到变化时,我需要什么,以及两个模块中发生的任何操作都必须处理同一个实体?

考虑到该员工与其他实体有关,例如与他相关的公司,并且该公司实体在两个模块中都不同(例如,它在 HR 模块中有很多详细信息,但在会计中只有公司在其下有一些分支机构)

注意:每个模块都有单独的数据库(不想在独立版本中扩大数据库)

开发两个模块以协同工作的正确方法是什么?还是独立的???

现在为时已晚,我们应该从一开始就将其设计为共享实体吗?

如果我使用共享实体意味着我应该共享业务逻辑和数据访问层?

我尝试在谷歌上搜索很多关于此的信息,但此类信息仅来自实际实施和生活经验

技术: Asp.net + Mysql

4

2 回答 2

0

您可以尝试使用流行的 ERP 软件(如 Oracle Apps 或 SAP)使用的模型。
在 Oracle 中,所有用户信息都存储在基表 (FND_USER) 中并由所有其他模块共享。其他模块可以有额外的表链接到基表。在 Oracle Apps 中,每个模块都有自己的架构

在您现有的设计中,如果您的数据库支持,您可以尝试使用数据库链接,然后使用触发器来更新您的链接表。

如果您考虑编程的基本原则 - DRY,那么您应该只有一个信息来源。如果可以的话,尽量避免同步。

于 2010-02-18T11:16:11.223 回答
0

不要犯在数据库级别耦合所有模块的错误。

您的模块化设计应该包括对象和数据。一个用户对象应该拥有它的数据。所有需要访问它的客户端都应该通过拥有它的对象。

将服务视为对象,而无需决定如何部署它们。您可能希望这是一个内存对象;它可能是您选择远程使用 SOAP 或 REST 或 CORBA 或 XML over HTTP 的分布式组件。但关键是将问题分解为组件而不共享模式。

如果您这样做,您将可以在不影响客户端的情况下更改架构。只有主人需要知道。

当您有客户端访问数据库时,它们都在数据库级别耦合。这可能会导致以后的悲伤。

只是好奇——当有这么多商业系统可用时,你为什么要从头开始编写一个 ERP 系统?它们既昂贵又复杂,但自己编写也是如此。权衡的讨论是什么样的?

于 2010-02-28T15:10:47.043 回答