我正在尝试在我的 POS 系统中实现模块化,以允许第 3 方执行某种模块/插件/附加组件。我已经开始实现 SPI 和 API,我的问题是:必须通过这种方式访问数据库中的数据,还是我需要提供服务?
在这一点上你可能已经注意到我在这方面的经验很少,所以这个话题的任何建议都是好的
编辑:多一点信息。我的系统有一个用户系统,理论上检查凭据以访问系统的任何部分,mysql 数据库,是用 Java 编写的。我的模块安全地需要访问数据库中的某些表,访问主菜单,我不知道我还能说什么,但我的问题更多地是关于 api 需要如何抽象。
提前致谢
PS如果我的英语不好请见谅
奥克塔维奥·鲁伊斯
最佳答案
一般而言,软件系统(通常)分为“层”(例如用户界面 (UI)、业务逻辑 (BL)、数据访问层 (DAL) 等)。这些层还提供了可以与之融合的自然场所。所以……
the access to the data on database has to be by this way or I need to provide a Service?
根据您所说的,我认为其他系统应该通过服务或 API 进行集成。授予对数据库的直接访问权限意味着他们将回避应该应用于他们想要执行的交互的业务逻辑。在您的具体情况下,这也可能意味着他们会回避您的安全措施。
模块化
这有两个部分:
- 有助于模块化系统的架构风格和设计模式(特别是在维护和可扩展性方面);这些都是技术不可知论者(您使用的技术无关紧要)。
- 实现和技术特定的框架和技术。
设计模式
Wikipedia 是介绍模式的好地方,StackOverflow 也有很多很棒的内容。
我开始着手处理所谓的 SOLID ,尽管它们都很有用,但我认为您会发现最有值(value)的 S、O、I 和 D 区域。
就模块化而言,依赖倒置(“D”)将与您特别相关。通过接口(interface)创建“契约(Contract)”,您创建了其他方可以构建的东西 - 例如:他们可以用他们自己制作的实现替换您的“默认”实现。
特定技术
我不能专门针对 Java 说话(尽管 find out 对您来说应该很容易)但是 .Net 有一些专门为这种事情构建的框架,例如:Managed Extensibility Framework (MEF).
重点是大多数技术堆栈将提供各种框架、工具和方法来构建模块化系统。
关于architecture - 模块化系统架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3900630/