🔷 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.