如何构建模块化应用程序

时间:2015-04-25 21:43:23

标签: android software-design

我的应用程序包含大约10个不同的组件(聊天,提要,个人资料,设置等等)。

我需要能够创建多个应用程序,每个应用程序都有许多组件。

示例:

  • app1 - 将有聊天设置和个人资料。
  • app2 - 将有Feed和设置。

我该如何处理?

我正在考虑将每个组件构建为一个库,然后为每个应用程序构建一个只需连接拼图的部分。

这是正确的方法吗?或者有没有人有更好的建议?

由于

2 个答案:

答案 0 :(得分:4)

您可以开发一个“SDK”项目(如Facebook SDK),其中包含所有组件(聊天,提要,个人资料,用户等),您可以将“SDK”用作其他项目中的库。使用您想要的特定应用程序组件。

这种方法将使“SDK”项目易于维护且易于升级。当您添加新功能(例如,专辑)时,您可以将其集成到“SDK”项目中并与现有应用程序一起使用。

答案 1 :(得分:0)

这种可扩展的模块化设计通常对于构建更大规模的软件或软件非常有用,这些软件或软件旨在处理各种未预料到的未来需求,特别是如果您在自下而上的方法中进行混合。

但是,根据您使用的语言和工具,处理此问题的有效方法会有所不同。

一个尴尬的部分是如何让模块在需要时能够彼此交谈,这样你就可以像乐高积木一样有效地将它们拼凑在一起。这通常会成为一种实际需要,因为软件的复杂性增长到一定程度,以至于只需将模块完全脱离,就像搁浅的岛屿和只有一个主要的"模块与所有人沟通。通常你的需求会增长,要求他们开始互相交谈。

例如,如果您使用像Python这样的动态脚本语言,那么每个模块都可以轻松地发布自己的公共接口,并且您可以开始使模块几乎毫不费力地相互通信。

如果您使用的是编译器和静态类型的语言(如C或C ++),那么让每个模块发布自己独特的接口并由其他人直接导入和使用会变得更加尴尬。在那里你需要让所有模块都可以访问标题,担心在你做出更改时保留ABI等。大量的更改会破坏ABI并根据特定的接口打破其他模块,所以我们在那里往往设计有点不同。

在这种情况下,您几乎总是需要一个包含所有抽象接口的中央软件开发工具包。然后你的模块实现这些接口并仍然相互通信,虽然是间接的(插件A与SDK接口进行通信,间接与另一个插件进行通信,B)。 SDK建立了通信的中心总部,将消息从一个模块转发到另一个模块。