Senior
Můžeš uvést příklad použití vzoru 'božský objekt' v návrhu softwaru?
sobes.tech AI
Odpověď od AI
Vzorec 'bůh-objekt' je charakterizován monolitickou třídou, která obsahuje příliš mnoho funkcí a dat a spravuje téměř všechny aspekty systému.
Příklad v kontextu vývoje pro Android — třída Activity nebo Fragment, která je používána k vykonávání všech úkolů:
- Zobrazení uživatelského rozhraní.
- Zpracování uživatelského vstupu.
- Načítání dat ze sítě.
- Ukládání dat do databáze.
- Správa stavu aplikace.
- Navigace mezi obrazovkami.
// Příklad Activity implementující vzor "bůh-objekt"
public class GodObjectActivity extends AppCompatActivity {
private TextView dataTextView;
private Button loadDataButton;
private AppDatabase appDatabase;
private NetworkService networkService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_god_object);
dataTextView = findViewById(R.id.data_text_view);
loadDataButton = findViewById(R.id.load_data_button);
// Inicializace závislostí přímo zde
appDatabase = AppDatabase.getInstance(this);
networkService = new NetworkService();
loadDataButton.setOnClickListener(v -> {
// Načtení dat ze sítě
networkService.fetchData(new NetworkService.DataCallback() {
@Override
public void onSuccess(String data) {
// Uložení do databáze
appDatabase.dataDao().insertData(new DataEntity(data));
// Aktualizace UI
runOnUiThread(() -> dataTextView.setText(data));
}
@Override
public void onError(String error) {
// Zpracování chyb
runOnUiThread(() -> dataTextView.setText("Chyba: " + error));
}
});
});
// Další logické bloky související s UI, business logikou a daty mohou být zde
setupRecyclerView();
handleUserAuthentication();
manageAppPermissions();
}
// Metoda pro nastavení RecyclerView
private void setupRecyclerView() {
// Logika nastavení RecyclerView...
}
// Metoda pro zpracování autentizace uživatele
private void handleUserAuthentication() {
// Logika autentizace...
}
// Metoda pro správu oprávnění
private void manageAppPermissions() {
// Logika správy oprávnění...
}
// Další metody pro zpracování různých událostí a logiky...
}
Taková třída porušuje princip SOLID, zejména princip jediné odpovědnosti (Single Responsibility Principle), což vede k následujícím problémům:
- Nízká čitelnost a udržovatelnost: Kód je objemný a složitý na pochopení.
- Vysoká vazba: Změny v jedné části třídy mohou ovlivnit jiné části.
- Obtížnost testování: Je těžké psát jednotkové testy pro takovou třídu.
- Nízká znovu použitelnosť kódu: Logika je úzce svázána s konkrétním Activity/Fragmentem.
Pro vyhnutí se "božímu objektu" v Android vývoji se používají architektonické vzory jako MVVM, MVP, MVI, Clean Architecture, které rozdělují odpovědnosti mezi různé komponenty (ViewModel, Presenter, Interactor atd.).