Senior
Ar galite pateikti pavyzdį, kaip naudojamas 'Dievo objektas' programinės įrangos projektavime?
sobes.tech AI
Atsakymas iš AI
'Dievo objektų' šablonas pasižymi monolitiniu klasiu, kuris turi per daug funkcijų ir duomenų, valdydamas beveik visus sistemos aspektus.
Pavyzdys Android kūrime — klasė Activity arba Fragment, naudojama visų užduočių vykdymui:
- Vartotojo sąsajos rodymas.
- Vartotojo įvesties apdorojimas.
- Duomenų įkėlimas iš tinklo.
- Duomenų saugojimas duomenų bazėje.
- Programos būsenos valdymas.
- Tarp ekranų navigacija.
// Pavyzdys Activity, įgyvendinančios "Dievo objekto" šabloną
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);
// Priklausomybių inicijavimas čia
appDatabase = AppDatabase.getInstance(this);
networkService = new NetworkService();
loadDataButton.setOnClickListener(v -> {
// Duomenų įkėlimas iš tinklo
networkService.fetchData(new NetworkService.DataCallback() {
@Override
public void onSuccess(String data) {
// Saugojimas duomenų bazėje
appDatabase.dataDao().insertData(new DataEntity(data));
// Vartotojo sąsajos atnaujinimas
runOnUiThread(() -> dataTextView.setText(data));
}
@Override
public void onError(String error) {
// Klaidų apdorojimas
runOnUiThread(() -> dataTextView.setText("Error: " + error));
}
});
});
// Kiti logikos blokai, susiję su UI, verslo logika ir duomenimis, gali būti čia
setupRecyclerView();
handleUserAuthentication();
manageAppPermissions();
}
// Metodas RecyclerView konfigūravimui (gali būti čia)
private void setupRecyclerView() {
// RecyclerView konfigūracijos logika...
}
// Metodas vartotojo autentifikacijai apdoroti (gali būti čia)
private void handleUserAuthentication() {
// Autentifikacijos logika...
}
// Metodas leidimų valdymui (gali būti čia)
private void manageAppPermissions() {
// Leidimų valdymo logika...
}
// Kiti metodai įvairių įvykių ir logikos apdorojimui...
}
Toks klasės modelis pažeidžia SOLID principus, ypač vienos atsakomybės principą (Single Responsibility Principle), kas sukelia šias problemas:
- Mažas skaitomumas ir palaikymas: kodas tampa didelis ir sudėtingas suprasti.
- Aukšta susietumas: pakeitimai vienoje dalyje gali paveikti kitus.
- Testavimo sudėtingumas: sunku rašyti vienetinius testus tokiam klasei.
- Mažas kodo pakartotinio naudojimo potencialas: logika glaudžiai susijusi su konkrečiu Activity/Fragment.
Android kūrime 'Dievo objekto' šablono išvengti naudojamos architektūrinės schemos, tokios kaip MVVM, MVP, MVI, Clean Architecture, kurios skiria atsakomybę tarp skirtingų komponentų (ViewModel, Presenter, Interactor ir kt.).