Sobes.tech
Junior — Middle

Ar galėtumėte pateikti pavyzdį, kada vienos atsakomybės principas yra pažeidžiamas kode?

sobes.tech AI

Atsakymas iš AI

Vienos atsakomybės principas (Single Responsibility Principle, SRP) teigia, kad klasė ar modulis turėtų turėti tik vieną priežastį keistis, tai yra būti atsakingas už vieną konkretų uždavinį.

Pavyzdys, kaip pažeisti SRP Android:

public class UserProfileActivity extends AppCompatActivity {
    // Atsakingas tiek už UI, tiek už duomenų įkėlimą ir nustatymų išsaugojimą

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_user_profile);

        // Vartotojo duomenų įkėlimas iš tinklo
        loadUserData();

        // Mygtuko išsaugoti paspaudimo apdorojimas
        findViewById(R.id.saveButton).setOnClickListener(v -> saveUserSettings());
    }

    private void loadUserData() {
        // Tinklo operacija
    }

    private void saveUserSettings() {
        // Nustatymų išsaugojimas
    }
}

Čia UserProfileActivity atsakinga tiek už UI rodymą, tiek duomenų įkėlimą ir nustatymų išsaugojimą — tai pažeidžia SRP. Geriau šias atsakomybes padalinti į skirtingus klases, pavyzdžiui, naudoti ViewModel verslo logikai ir atskirą klasę darbui su tinklu.