我们将开发ERP,应该可以为不同的客户定制,并且客户也可以知道哪些模块需要哪些模块不需要。
例如:我们得到了模块A,B和C.客户只需要A和B,其中每个模块都有域模型,业务层,rest api。还需要将另一个实体添加到模块A的域模型中,这会导致数据库,业务流程的变化以及休息(休息的变化应该导致前端的变化)。
我们没有这种软件的经验,所以我会请你帮忙。你能告诉我这个用例的最佳实践是什么吗?什么是推荐的项目结构?
我们正在考虑这个问题:
root/
- Module A/
- - domain/
- - service/
- - api/
- Module B/
- - domain/
- - service/
- - api/
- Angular Module
- - Modle A Components
- - Modle B Components
这将是我们的默认模板,当客户询问有关更改时,我们将为此创建另一个分支。这是好方法吗?你怎么看?
谢谢你的建议解答。
从头开始设计和实施ERP并非易事,特别是在您遇到此类应用程序的经验不足的情况下。我建议看看开源ERP / CRM解决方案 - Apache OFBiz可能是一个很好的选择或起点,因为你有一些Java专业知识。正如您在问题中提到的,它们提供了非常好的documentation和模块化的3-tier architecture。框架有点旧,但作为一个很好的灵感来源。
所有Apache OFBiz功能都建立在通用框架之上。功能可分为以下不同的层:
表示层Apache OFBiz使用“屏幕”的概念来表示Apache OFBiz页面。通常,每个页面都表示为一个屏幕。 Apache OFBiz中的页面由组件组成。组件可以是页眉,页脚等。当呈现页面时,所有组件按照屏幕定义中的指定组合在一起。组件可以是Java Server Pages([JSP] s),围绕FreeMarker模板引擎构建的FTL页面,表单或菜单小部件。小部件是OFBiz特定技术。
业务层业务或应用程序层定义提供给用户的服务。服务可以是几种类型:Java方法,SOAP,简单服务,工作流等。服务引擎负责调用,事务和安全性。 Apache OFBiz使用一组开源技术和标准,如Java,Java EE,XML和SOAP。虽然Apache OFBiz是围绕Java EE使用的概念构建的,但它的许多概念都以不同的方式实现;要么是因为Apache OFBiz是在最近Java EE的许多改进之前设计的,要么是因为Apache OFBiz的作者不同意这些实现。
数据层数据层负责数据库访问,存储并为业务层提供通用数据接口。数据不是以面向对象的方式访问,而是以关系方式访问。每个实体(表示为数据库中的一行)作为一组通用值提供给业务层。未键入通用值,因此列名称可访问实体的字段。
模块化和定制是ERP等复杂软件系统中的两个不同问题。
首先,基于域的体系结构并不太合适:有许多交集并且您无法独立设计每个域,您至少需要明确定义接口和通用数据完整性。这些模块的依赖结构不是简单的,而是分层的,即销售和采购基于产品和客户,生产基于材料和人力资源等。
其次,定制是正交的低级功能,可以以不同的方式实现:元数据,参数化,内部脚本语言或DSL,屏幕形式和查询/报告设计者等。这些模块对于所有其他模块是通用的。
还看看我关于architecture layers and levels in information system的旧介绍。
这是一个非常特定领域的问题,没有完整的要求,任何人都无法给出确切的答案。由于我一直在研究ERP,我将尝试向您提供我们如何使ERP动态化的提示。这一切都与database design
有关
首先,你应该在Role-Permission
上有一个灵活的Spring Security
模块,它可以适用于所有类型的用户。就像你可以创建多个Roles
,Role
可以有多个Permissions
,而User
可以有多个Roles
。这将帮助您控制较低级别的事物/功能。
USER<----ManyToManyBridge--->ROLE<----ManyToManyBridge--->PERMISSION
改变休息应该引起前端的改变
您可以通过为Roles
为不同的模块提供不同的Users
来实现它,并且基于此,您可以在dashboard/jsps
的帮助下登录后将它们重定向到不同的CustomSuccessHandler
什么是推荐的项目结构?
有单独的模块包可以,但我更喜欢在MVC
上使用更广泛的root
结构。
Root/
- Controller
-- Module1
--- Controller
--- Controller
-- Module2
--- Controller
--- Controller
- Model
-- Module1
--- Model
--- Model
-- Module1
--- Model
--- Model
- Repository
...
...
- Service
...
...
- WEB-INF
-- Views
--- Module1
---- .jsp
---- .jsp
--- Module2
---- .jsp
---- .jsp
在开发ERP
时需要记住的事项列表将不断增加,但最重要的是您的数据库设计不仅仅是项目结构,而且这一切都取决于业务需求。
您正在寻找的是Feature Toggles(又名功能标志)
Feature Toggles是一种功能强大的技术,允许团队在不更改代码的情况下修改系统行为。它们属于各种使用类别,在实施和管理切换时将这种分类考虑在内是很重要的。 Toggles引入了复杂性。我们可以通过使用智能切换实施实践和适当的工具来管理我们的切换配置来控制这种复杂性,但我们还应该限制系统中切换的次数。 - Martin Fowler
检查这些解决方案