gpt4 book ai didi

java - android类构造函数中的最佳实践

转载 作者:行者123 更新时间:2023-11-29 21:16:50 24 4
gpt4 key购买 nike

我应该在 android 中初始化我的类的正确方法是什么,该类称为 Compilation 并且它的所有值都在数据库中。

我可以做到以下几点:

1

public Compilation(int id)
{
// get db singleton here and fill all values
// however I feel this is bad OO because nobody knows I am doing this
}

2

public Compilation(int id, SQLiteDatabase db)
{
// use the provided db to get the info
// however now all calling classes will have to get the db for me
}

3

// get all compilations at once
SQLiteDatabase db = DatabaseHelper.getInstance().getReadableDatabase();
Cursor c = db.rawQuery("SELECT * FROM Compilation", null);

while(c.moveToNext())
{
// get all params here
Compilation comp = new Compilation (a,b,c,d,e);
}

public Compilation(a,b,c,d,e)
{
// just assign all the values given to private vars
}

The problem I see with this is that now the Compilation class is no longer so self contained, it needs another class to initialise it.

哪一个是正确的做法?

最佳答案

软件设计的一般规则告诉我们,我们应该创建对软件系统其他部分的依赖性最小的类。通过这种方式,我们最终得到了可重用性更好的类。

您提出的第一个替代方案是最糟糕的一个,因为它对一个特定的数据提供程序 (sqlite) 产生了非常紧密的依赖。维护这样的类可能是一场噩梦(试想下一个版本的 Android 将带有 sqlite 或 mysql :) 而你想切换到 mysql)

如果您将构造函数参数从类替换为接口(interface),从而创建我们称之为 Dependency injection 的东西,那么第二个会更好一些。 .然而,有更好的方法在 Android 上进行依赖注入(inject)(查看示例 Dagger)

第三个在我看来是最合适的,因为您不会产生任何依赖性。也许为了简化此类类的创建(并使代码更“企业化”一点),您可以创建一个工厂类来创建编译类的实例(更多关于此 here )

然而,归根结底,这不是关于 Android 最佳实践的问题,而是关于软件设计决策的问题,这在很大程度上取决于您要做什么!

关于java - android类构造函数中的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com