Sobes.tech
Senior

Vai vari sniegt piemēru par 'Dieva objektu' izmantošanu programmatūras projektēšanā?

sobes.tech AI

Atbilde no AI

'Dieva objekta' paraugs raksturo monolītiska klase, kas satur pārāk daudz funkciju un datu, kontrolējot gandrīz visus sistēmas aspektus.

Piemērs Android izstrādē — klase Activity vai Fragment, kas tiek izmantota visu uzdevumu veikšanai:

  • Lietotāja saskarnes attēlošana.
  • Lietotāja ievades apstrāde.
  • Datu ielāde no tīkla.
  • Datu saglabāšana datu bāzē.
  • Lietojumprogrammas stāvokļa pārvaldība.
  • Ekrānu navigācija.
// Piemērs Activity, kas īsteno "Dieva objekta" paraugu
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);

        // Atkarību inicializācija šeit
        appDatabase = AppDatabase.getInstance(this);
        networkService = new NetworkService();

        loadDataButton.setOnClickListener(v -> {
            // Datu ielāde no tīkla
            networkService.fetchData(new NetworkService.DataCallback() {
                @Override
                public void onSuccess(String data) {
                    // Saglabāšana datu bāzē
                    appDatabase.dataDao().insertData(new DataEntity(data));
                    // Lietotāja saskarnes atjaunināšana
                    runOnUiThread(() -> dataTextView.setText(data));
                }

                @Override
                public void onError(String error) {
                    // Kļūdu apstrāde
                    runOnUiThread(() -> dataTextView.setText("Error: " + error));
                }
            });
        });

        // Citas loģikas blokas, kas saistītas ar UI, biznesa loģiku un datiem, var būt šeit
        setupRecyclerView();
        handleUserAuthentication();
        manageAppPermissions();
    }

    // Metode RecyclerView konfigurācijai (var būt šeit)
    private void setupRecyclerView() {
       // RecyclerView konfigurācijas loģika...
    }

    // Metode lietotāja autentifikācijai (var būt šeit)
    private void handleUserAuthentication() {
       // Autentifikācijas loģika...
    }

     // Metode atļauju pārvaldībai (var būt šeit)
     private void manageAppPermissions() {
        // Atļauju pārvaldības loģika...
     }

    // Citas metodes dažādiem notikumiem un loģikai...
}

Šāda klase pārkāpj SOLID principus, īpaši vienas atbildības principu (Single Responsibility Principle), kas noved pie šādām problēmām:

  • Zema lasāmība un uzturēšana: kods kļūst apjomīgs un grūti saprotams.
  • Augsta sasaistība: izmaiņas vienā daļā var ietekmēt citas.
  • Testēšanas grūtības: ir grūti rakstīt vienību testus šādai klasei.
  • Zema koda atkārtotas izmantošanas iespēja: loģika ir cieši saistīta ar konkrētu Activity/Fragment.

Android izstrādē, lai izvairītos no 'Dieva objekta' parauga, tiek izmantoti arhitektūras modeļi, piemēram, MVVM, MVP, MVI, Clean Architecture, kas sadala atbildību starp dažādām komponentēm (ViewModel, Presenter, Interactor utt.).