Sobes.tech
Senior

Proqram təminatı dizaynında 'tanrı obyekti' nümunəsinin istifadəsinə nümunə göstərə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

'Tanrı-obekt' nümunəsi çox funksiyalı və məlumatları saxlayan monolitik bir siniflə xarakterizə olunur və sistemin demək olar ki, bütün aspektlərini idarə edir.

Android inkişaf kontekstində nümunə — Activity və ya Fragment sinifləri, bütün tapşırıqları yerinə yetirmək üçün istifadə olunur:

  • UI-nin göstərilməsi.
  • İstifadəçi girişinin işlənməsi.
  • Şəbəkədən məlumatların yüklənməsi.
  • Məlumatların verilənlər bazasında saxlanması.
  • Tətbiqin vəziyyətinin idarə olunması.
  • Ekranlar arasında naviqasiya.
// 'Tanrı-obekt' nümunəsini həyata keçirən Activity nümunəsi
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);

        // Asılılıqları birbaşa burada inisializasiya etmək
        appDatabase = AppDatabase.getInstance(this);
        networkService = new NetworkService();

        loadDataButton.setOnClickListener(v -> {
            // Şəbəkədən məlumatların yüklənməsi
            networkService.fetchData(new NetworkService.DataCallback() {
                @Override
                public void onSuccess(String data) {
                    // Məlumatların verilənlər bazasında saxlanması
                    appDatabase.dataDao().insertData(new DataEntity(data));
                    // UI-nin yenilənməsi
                    runOnUiThread(() -> dataTextView.setText(data));
                }

                @Override
                public void onError(String error) {
                    // Xəta ilə işləmək
                    runOnUiThread(() -> dataTextView.setText("Xəta: " + error));
                }
            });
        });

        // UI, biznes loji və məlumatlarla əlaqəli digər bloklar burada ola bilər
        setupRecyclerView();
        handleUserAuthentication();
        manageAppPermissions();
    }

    // RecyclerView üçün konfiqurasiya metodu (burada ola bilər)
    private void setupRecyclerView() {
       // RecyclerView konfiqurasiyası loqikası...
    }

    // İstifadəçi autentifikasiyasını işləyən metod (burada ola bilər)
    private void handleUserAuthentication() {
       // Autentifikasiya loqikası...
    }

     // İcazələrin idarə olunması üçün metod (burada ola bilər)
     private void manageAppPermissions() {
        // İcazələrin idarə olunması loqikası...
     }

    // Müxtəlif hadisələr və loqika üçün digər metodlar...
}

Belə bir sinif SOLID prinsiplərini, xüsusən də tək məsuliyyət prinsipi (Single Responsibility Principle), pozur və aşağıdakı problemlərə səbəb olur:

  • Aşağı oxunaqlıq və dəstək: Kod çox böyük və anlaşılan deyil.
  • Yüksək əlaqəlilik: Sinifdəki dəyişikliklər digər hissələrə təsir edə bilər.
  • Testin çətinliyi: Belə sinif üçün vahid testlər yazmaq çətindir.
  • Kodun təkrar istifadə imkanının aşağı olması: Loqika konkret Activity/Fragment ilə sıx bağlıdır.

Android inkişafında 'tanrı-obekt' problemindən qaçmaq üçün MVVM, MVP, MVI, Clean Architecture kimi arxitektura nümunələri istifadə olunur və bunlar məsuliyyəti müxtəlif komponentlər arasında bölür (ViewModel, Presenter, Interactor və s.).