【问题标题】:Design help for multi flavord app多风格应用的设计帮助
【发布时间】:2017-03-28 03:46:00
【问题描述】:

我正在开发一款针对特定业务合作伙伴而非消费者的应用。起初,我们有一个主要代码库,仅在资源之类的琐碎事物上根据每个客户的风格进行区分(例如,将为每个客户定义不同的主颜色和徽标)。

然而,随着时间的推移,不同的客户需要不同的逻辑,我们不得不适应,所以我们将小块代码分解为一个“默认行为”类,该类在每种风格上都有一个扩展它的类,因此我们可以对每个风格进行细微的更改味道。

问题是随着时间的推移,基本行为类已经变成了怪物,重构很可能会破坏一种或另一种风格(大约有 30 种)。

所以基本上我的问题是:

谁能想到一个设计解决方案可以扩展以帮助管理具有多种风格的应用程序,在 UI 和逻辑方面越来越不同,代码重复最少且易于维护?

【问题讨论】:

    标签: android oop


    【解决方案1】:

    您可以使用BuildConfig 类。这是gradle每次构建应用时创建的一个静态类,可以在你的应用中访问。

    你这样声明它们:

    android {
        productFlavors {
            flavorX {
                buildConfigField("String", "Flavor", "\"flavorX\"")
            }
        }
    }
    

    然后在代码中你只需使用

    String flavor = BuildConfig.Flavor;
    if(flavor.equals("flavorX")){
        //do stuff
    }
    

    BuildConfig 是一个静态类,因此这将允许您在需要的地方进行风味区分,而不仅仅是在一个替换的类中。在您的情况下,这似乎更有效且更易于维护。

    【讨论】:

    • 我们已经依赖 BuildConfig 类来处理各种需要根据风格替换的 CONSTS,但这对于设计来说不是一个好的选择,因为代码只会充满大量的 if/else if扩大主代码库的语句
    • 当然,但它仍然比替换 30 种口味的类要好。如果您保持代码干净并且所有程序员都知道这种方法,那么这个解决方案非常有效:-) 此外,编写一些 Util 类(如 FlavorUtil.java),使用 isFlavorX()、isPinkFlavor() 等方法是值得的等等,所以所有的等于逻辑和常量都保存在一个地方:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2011-01-16
    • 2023-03-22
    相关资源
    最近更新 更多