Android有一个核心ERP移动应用程序。客户已请求其他功能,这些功能需要更多屏幕(和Activities
)和额外功能。
有没有办法可以为核心移动应用程序添加一些扩展,以便集成额外的功能,还是应该在核心应用程序的代码之上进行编码?
我有兴趣找到一个专注于可扩展性的简洁解决方案,因为不同的客户可能会要求不同的附加功能。你会如何处理这样的问题?关于这样一个项目结构的任何提示也会受到欢迎。
如果额外的功能需要使用与核心应用程序相同的数据库,它会有所作为吗?
提前感谢您的帮助。
答案 0 :(得分:2)
您的问题的答案在于Bertrand Meyer介绍的开放/封闭原则。 Open/Closed Principle是一个非常简单的面向对象设计原则,它说明了
软件实体(类,模块,函数等)应该是可以扩展的,但是关闭以进行修改"
从您的问题中可以清楚地看出,您已经确定了应用程序中的核心功能。因此,我建议,在开放/封闭原则的基础上,您应该冻结代码功能并在不破坏内核的情况下编写客户特定功能,而不是修改此核心功能并使其更具体。
现在回答你关于你可以遵循什么样的结构的问题。我建议您创建一个核心功能的库项目,并制作不同的客户特定项目,其中包括您的核心功能作为库项目。
如果您的应用程序使用与您的核心应用程序相同的数据库,并且所有应用程序都使用它,那么它将不会有所作为,否则它不应该首先在您的核心应用程序中。
希望这个解释可以帮到你。
<强>更新强>
我的朋友指出,我可能没有理解这个问题。所以,而不是纠正我的旧帖子(...可能对其他人有用)我正在更新它。
因此,如果我理解正确,那么您有一个您可能没有编码的ERP项目。根据我的说法,正确的方法仍然是你构建现有的代码。不要对此项目进行更改,而是将其作为库包含在内,因为如果从可靠的源下载项目,您将获得更新版本的好处,以及何时可用。
答案 1 :(得分:1)
这是一种设计哲学问题。以下是一些可能为您提供想法的选择:
您可以考虑将核心应用程序代码/功能放入自定义库中。然后,您的新核心应用程序只是一个包含自定义库的简单包装器。您对特定客户的附加功能可能是一个不同的应用程序,它也引用了核心库,但将包含其他功能。有很多关于如何将您的应用程序转换为自定义库的教程。您最终会得到针对不同客户的不同应用。 (我需要一段时间才能发现的一个提示是,如果你的自定义库中有一个资源名称,你可以通过在包含该库的应用程序中使用相同的名称来“覆盖”它。另一个提示是你需要基本上通过列出应用程序将使用的库中的所有活动来复制应用程序中库的清单。)我没有尝试过,但可能是您的附加功能是包含在不同应用程序中的每个库。
您可以使用用户输入的密钥来解锁某些功能。您可以将其保存为共享首选项,以便他们不需要继续输入密钥。除了确定哪个客户端获得了哪些功能之外,这种方法的好处是您可以为其他客户端“重用”功能而无需任何其他实现。大多数用户都没有钥匙可以解锁任何东西。
这两个解决方案都应该使用相同的数据库,因为它们会调用相同的核心类等。
答案 2 :(得分:1)
另一种可能的解决方案是创建一个图书馆计划。将您的核心ERP应用程序代码放入库Project中,然后为不同的客户创建不同的项目。这些项目中的每一个也将使用相同的库项目。
您的核心库项目可能会公开api以动态注册新功能(例如可以显示新菜单项的菜单)。