2010-02-18 38 views
2

我和我的团队在ERP系统上工作有许多模块(HR,财务等)集成2之间在ERP系统

我们所面临的问题有2个模块之间有一些共同的实体(HR ,会计),如员工

员工在人力资源系统有很多类似的细节:在会计

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

员工有几个信息

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

1)假设每个模块将作为一个独立版本(这完成)

2)假设2个模块将共同工作,以便意味着雇员将在两个模块中反映即使它们在各自不同的流系统

当我在人力资源模块中定义一名新员工时,需要让会计模块感觉到这种变化以及在两个模块中发生了什么操作,他们必须处理同一个实体时需要什么?

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

注:每个模块都有独立的数据库(没希望扩大在单机版本的数据库)

什么是发展两个模块一起工作的正确方法?或作为独立?

是不是太晚了,我们应该从一开始就将它设计为共享实体?

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

我试着google了很多关于这一点,但有点像这个信息会只能从实际执行情况和生活经验

技术: Asp.net + MYSQL

+0

你使用哪个数据库? – Padmarag 2010-02-18 11:21:22

+0

我使用MySQL数据库 – 2010-02-18 11:25:47

回答

0

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

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

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

+0

,但在这种情况下,如果应用程序作为独立应用程序工作,它将崩溃导致它不会找到它链接的表 – 2010-02-18 11:24:30

+0

正如我所建议的,如果您不想更改现有设计,那么您需要同步这两个表。 – Padmarag 2010-02-18 11:39:20

0

请不要在数据库级别连接所有模块。

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

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

如果你这样做,你可以在不影响客户端的情况下改变模式。只有店主需要知道。

当客户进入数据库时​​,他们都在数据库级别耦合。这可能会在以后导致悲伤。

只是好奇 - 为什么你会从零开始编写ERP系统,当有这么多的商业可用?它们昂贵且复杂,但编写自己的代码也是如此。什么是权衡讨论?