Senior
Можеш ли да наведеш пример коришћења патерна 'бог-објекат' у дизајну софтвера?
sobes.tech АИ
Одговор од АИ
Модел 'бог-објекат' карактерише монолитна класа која садржи превише функција и података, управљајући скоро свим аспектима система.
Пример у контексту Android развоја — класа Activity или Fragment, која се користи за извршавање свих задатака:
- Приказ корисничког интерфејса.
- Обрада корисничког уноса.
- Учитавање података са мреже.
- Складиштење података у базу података.
- Управљање стањем апликације.
- Навигација између екрана.
// Пример Activity који реализује модел "бог-објекат"
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);
// Инициализација зависности директно овде
appDatabase = AppDatabase.getInstance(this);
networkService = new NetworkService();
loadDataButton.setOnClickListener(v -> {
// Учитавање података са мреже
networkService.fetchData(new NetworkService.DataCallback() {
@Override
public void onSuccess(String data) {
// Складиштење у базу података
appDatabase.dataDao().insertData(new DataEntity(data));
// Ажурирање UI
runOnUiThread(() -> dataTextView.setText(data));
}
@Override
public void onError(String error) {
// Обрада грешака
runOnUiThread(() -> dataTextView.setText("Грешка: " + error));
}
});
});
// Други логички блокови, повезани са UI, бизнис логиком и подацима могу бити овде
setupRecyclerView();
handleUserAuthentication();
manageAppPermissions();
}
// Метод за подешавање RecyclerView
private void setupRecyclerView() {
// Логика подешавања RecyclerView...
}
// Метод за обраду аутентификације корисника
private void handleUserAuthentication() {
// Логика аутентификације...
}
// Метод за управљање дозволама
private void manageAppPermissions() {
// Логика управљања дозволама...
}
// Други методи за обраду различитих догађаја и логике...
}
Такав клас нарушава принципе SOLID, посебно принцип једне одговорности (Single Responsibility Principle), и доводи до следећих проблема:
- Ниска читљивост и одрживост: Код постаје обиман и тешко разумљив.
- Висока повезаност: Промене у једном делу класе могу утицати на друге делове.
- Тешкоће у тестирању: Тешко је писати јединичне тестове за такву класу.
- Ниска поновна употребљивост кода: Логика је тесно повезана са конкретним Activity/Fragment-ом.
Да би се избегла 'бог-објекат' у Android развоју, користе се архитектонски модели као што су MVVM, MVP, MVI, Clean Architecture, који раздвајају одговорности између различитих компоненти (ViewModel, Presenter, Interactor и др.).