Senior
Môžeš uviesť príklad použitia vzoru 'boh-objekt' v návrhu softvéru?
sobes.tech AI
Odpoveď od AI
Vzorec 'boh-objekt' je charakterizovaný monolitickou triedou, ktorá obsahuje príliš veľa funkcií a dát a spravuje takmer všetky aspekty systému.
Príklad v kontexte vývoja pre Android — trieda Activity alebo Fragment, ktorá sa používa na vykonávanie všetkých úloh:
- Zobrazenie používateľského rozhrania.
- Spracovanie používateľského vstupu.
- Načítanie dát zo siete.
- Ukladanie dát do databázy.
- Správa stavu aplikácie.
- Navigácia medzi obrazovkami.
// Príklad Activity, ktorá implementuje vzor "boh-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);
// Inicializácia závislostí priamo tu
appDatabase = AppDatabase.getInstance(this);
networkService = new NetworkService();
loadDataButton.setOnClickListener(v -> {
// Načítanie dát zo siete
networkService.fetchData(new NetworkService.DataCallback() {
@Override
public void onSuccess(String data) {
// Uloženie do databázy
appDatabase.dataDao().insertData(new DataEntity(data));
// Aktualizácia UI
runOnUiThread(() -> dataTextView.setText(data));
}
@Override
public void onError(String error) {
// Spracovanie chýb
runOnUiThread(() -> dataTextView.setText("Chyba: " + error));
}
});
});
// Ďalšie logické bloky súvisiace s UI, biznis logikou a dátami môžu byť tu
setupRecyclerView();
handleUserAuthentication();
manageAppPermissions();
}
// Metóda na nastavenie RecyclerView
private void setupRecyclerView() {
// Logika nastavenia RecyclerView...
}
// Metóda na spracovanie autentifikácie používateľa
private void handleUserAuthentication() {
// Logika autentifikácie...
}
// Metóda na správu povolení
private void manageAppPermissions() {
// Logika správy povolení...
}
// Ďalšie metódy na spracovanie rôznych udalostí a logiky...
}
Takáto trieda porušuje princípy SOLID, najmä princíp jednotnej zodpovednosti (Single Responsibility Principle), a vedie k nasledujúcim problémom:
- Nízka čitateľnosť a údržba: Kód je objemný a ťažko zrozumiteľný.
- Vysoká väzba: Zmeny v jednej časti triedy môžu ovplyvniť iné časti.
- Ťažkosti pri testovaní: Je ťažké písať jednotkové testy pre takúto triedu.
- Nízka opakovateľnosť kódu: Logika je úzko spojená s konkrétnym Activity/Fragmentom.
Na vyhnutie sa 'boh-objektu' v Android vývoji sa používajú architektonické vzory ako MVVM, MVP, MVI, Clean Architecture, ktoré rozdeľujú zodpovednosti medzi rôzne komponenty (ViewModel, Presenter, Interactor a pod.).