🔷 MVC – Model View Controller

🔷 MVC – Model View Controller

מבנה כללי

  • Model – אחראי על הנתונים, אחזורם, שמירתם ועיבודם (למשל דרך Firebase, SQLite, או API).
  • View – אחראית על הצגת הנתונים למשתמש (Activity, Fragment, Layout XML).
  • Controller – אחראי על הקישור בין ה-View ל-Model: מאזין לאירועים (כפתורים, אינפוטים), מפעיל לוגיקה ומעדכן את ה-View בהתאם.

דוגמה ב-Java

// Model
public class User {
    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() { return name; }
    public int getAge() { return age; }
}

// Controller (Activity)
public class MainActivity extends AppCompatActivity {
    private TextView txtName;
    private User user;

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

        txtName = findViewById(R.id.txtName);
        user = new User("דנה", 25);
        txtName.setText(user.getName());
    }
}

במבנה זה, ה-Activity משמשת גם כ-Controller וגם כ-View, ולכן קשה לבדוק או להחליף שכבות בנפרד. מכאן נולדה גישת MVP.


🔶 MVP – Model View Presenter

עקרונות

ב-MVP מפרידים בצורה ברורה יותר את השכבות:

  • Model – אחראי על הנתונים (כמו ב-MVC).
  • View – ממשק (interface) שמגדיר מה ה-Presenter יכול לעשות עם התצוגה (כגון showUserName()).
  • Presenter – אחראי על הלוגיקה: מקבל בקשות מה-View, פונה ל-Model, ומחזיר תוצאה ל-View.

מבנה כללי באפליקציית Java

Activity (implements View) ↔ Presenter ↔ Model

דוגמה ב-Java

Model

public class UserModel {
    public User getUser() {
        return new User("דנה", 25);
    }
}

View (Interface)

public interface UserView {
    void showUserName(String name);
}

Presenter

public class UserPresenter {
    private UserView view;
    private UserModel model;

    public UserPresenter(UserView view) {
        this.view = view;
        this.model = new UserModel();
    }

    public void loadUser() {
        User user = model.getUser();
        view.showUserName(user.getName());
    }
}

Activity (ה-View בפועל)

public class MainActivity extends AppCompatActivity implements UserView {
    private TextView txtName;
    private UserPresenter presenter;

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

        txtName = findViewById(R.id.txtName);
        presenter = new UserPresenter(this);
        presenter.loadUser();
    }

    @Override
    public void showUserName(String name) {
        txtName.setText(name);
    }
}

⚖️ השוואה בין MVC ל-MVP

מאפיין MVC MVP
תפקיד Activity משמשת גם כ-View וגם כ-Controller מיישמת רק את ממשק ה-View
בדיקות אוטומטיות קשות לביצוע קלות יותר (Presenter ניתן לבדיקה בקלות)
תלות הדדית גבוהה בין שכבות מופרדת וברורה
תחזוקה קשה יחסית נוחה ותחזוקתית

💡 טיפ למעבר הדרגתי

אם יש לכם פרויקט קיים שבו ה-Activity מכילה לוגיקה עסקית, ניתן בהדרגה להעביר את הלוגיקה למחלקות Presenter מבלי לשנות את הממשק החיצוני. התחילו מהפרדת הממשק (interface) של ה-View.


🧩 מה הלאה

בעולם המודרני, גישות מתקדמות יותר כמו MVVM (Model-View-ViewModel) משולבות עם Jetpack Compose ו-LiveData. אך חשוב להבין קודם את הבסיס של MVC ו-MVP, שכן הן מציבות את עקרונות ההפרדה והמודולריות שבלעדיהם קשה לפתח אפליקציות בקנה מידה גדול.


📚 סיכום

  • MVC – מבנה פשוט אך מקשה על תחזוקה בפרויקטים גדולים.
  • MVP – מבנה מופרד היטב עם קלות בבדיקות ותחזוקה.
  • באנדרואיד מודרני מומלץ להתחיל מ-MVP לפני מעבר ל-MVVM.