Sobes.tech
Senior

Yazılım tasarımında 'tanrı nesnesi' deseninin kullanımına örnek verebilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

'Tanrı-nesne' deseni, çok fazla fonksiyon ve veri içeren tek parça bir sınıfla karakterizedir ve sistemin neredeyse tüm yönlerini yönetir.

Android geliştirme bağlamında bir örnek, tüm görevleri yerine getirmek için kullanılan Activity veya Fragment sınıfıdır:

  • UI gösterimi.
  • Kullanıcı girişinin işlenmesi.
  • Ağdan veri yükleme.
  • Veritabanına veri kaydetme.
  • Uygulama durumunu yönetme.
  • Ekranlar arasında gezinme.
// 'Tanrı-nesne' desenini uygulayan Activity örneği
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);

        // Bağımlılıkları doğrudan burada başlatma
        appDatabase = AppDatabase.getInstance(this);
        networkService = new NetworkService();

        loadDataButton.setOnClickListener(v -> {
            // Ağdan veri yükleme
            networkService.fetchData(new NetworkService.DataCallback() {
                @Override
                public void onSuccess(String data) {
                    // Veritabanına kaydetme
                    appDatabase.dataDao().insertData(new DataEntity(data));
                    // UI güncelleme
                    runOnUiThread(() -> dataTextView.setText(data));
                }

                @Override
                public void onError(String error) {
                    // Hata işleme
                    runOnUiThread(() -> dataTextView.setText("Error: " + error));
                }
            });
        });

        // UI, iş mantığı ve verilerle ilgili diğer mantık blokları burada olabilir
        setupRecyclerView();
        handleUserAuthentication();
        manageAppPermissions();
    }

    // RecyclerView ayarlama metodu (burada olabilir)
    private void setupRecyclerView() {
       // RecyclerView ayar mantığı...
    }

    // Kullanıcı kimlik doğrulama işlemini ele alan metod (burada olabilir)
    private void handleUserAuthentication() {
       // Kimlik doğrulama mantığı...
    }

     // Uygulama izinlerini yönetme metodu (burada olabilir)
     private void manageAppPermissions() {
        // İzin yönetimi mantığı...
     }

    // Diğer olaylar ve mantık işlemleri için metodlar...
}

Bu tür bir sınıf, SOLID ilkelerini, özellikle Tek Sorumluluk Prensibi'ni ihlal eder ve şu sorunlara yol açar:

  • Düşük okunabilirlik ve bakım kolaylığı: Kod büyük ve anlaşılması zor hale gelir.
  • Yüksek bağlılık: Sınıfın bir bölümündeki değişiklikler diğerlerini etkileyebilir.
  • Test zorluğu: Bu tür bir sınıf için birim testleri yazmak zordur.
  • Düşük kod tekrar kullanılabilirliği: Mantık, belirli bir Activity/Fragment ile yakından ilişkilidir.

Android geliştirmede 'tanrı-nesne'yi önlemek için MVVM, MVP, MVI, Clean Architecture gibi mimari desenler kullanılır; bunlar sorumluluğu farklı bileşenler (ViewModel, Presenter, Interactor vb.) arasında bölüştürür.