Tôi đang bắt đầu một dự án nhóm trường học bằng Java, sử dụng Swing. Đó là một GUI đơn giản trên ứng dụng máy tính để bàn cơ sở dữ liệu.
Giáo sư đã cho chúng tôi mã từ dự án năm ngoái để chúng tôi có thể thấy cách anh ấy làm mọi việc. Ấn tượng ban đầu của tôi là mã phức tạp hơn nhiều so với nó, nhưng tôi tưởng tượng các lập trình viên thường nghĩ điều này khi nhìn vào mã họ không chỉ viết.
Tôi hy vọng tìm thấy lý do tại sao hệ thống của anh ta tốt hay xấu. (Tôi đã hỏi giáo sư và anh ấy nói tôi sẽ thấy sau đó tại sao nó tốt hơn, điều đó không làm tôi hài lòng.)
Về cơ bản, để tránh bất kỳ sự ghép nối nào giữa các đối tượng, mô hình (logic nghiệp vụ) và các khung nhìn bền vững của anh ấy, mọi thứ đều được thực hiện bằng các chuỗi. Các đối tượng bền vững được lưu trữ trong cơ sở dữ liệu là các hàm băm của chuỗi và các mô hình và chế độ xem "đăng ký" với nhau, cung cấp các khóa chuỗi cho "sự kiện" mà chúng đăng ký.
Khi một sự kiện được kích hoạt, chế độ xem hoặc mô hình sẽ gửi một chuỗi tới tất cả những người đăng ký quyết định những việc cần làm cho sự kiện đó. Chẳng hạn, trong một trong các phương thức nghe hành động xem (tôi tin rằng điều này chỉ đặt bikeMakeField trên đối tượng bền vững):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
Cuộc gọi đó cuối cùng đã đến phương thức này trong mô hình Xe:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
Giáo sư nói rằng cách làm việc này có thể mở rộng và duy trì được nhiều hơn so với quan điểm chỉ đơn giản là gọi một phương thức trên một đối tượng logic nghiệp vụ. Ông nói rằng không có sự kết hợp giữa các quan điểm và mô hình vì họ không biết về sự tồn tại của nhau.
Tôi nghĩ rằng đây là một loại khớp nối tồi tệ hơn, bởi vì khung nhìn và mô hình phải sử dụng cùng một chuỗi để hoạt động. Nếu bạn xóa chế độ xem hoặc mô hình hoặc tạo lỗi chính tả trong chuỗi, bạn sẽ không gặp lỗi biên dịch. Nó cũng làm cho mã dài hơn rất nhiều so với tôi nghĩ nó cần phải có.
Tôi muốn thảo luận điều này với anh ta, nhưng anh ta sử dụng kinh nghiệm trong ngành của mình để chống lại bất kỳ cuộc tranh luận nào mà tôi, một sinh viên thiếu kinh nghiệm, có thể đưa ra. Có một số lợi thế cho cách tiếp cận của anh ấy mà tôi đang thiếu?
Để làm rõ, tôi muốn so sánh cách tiếp cận trên, với việc có quan điểm rõ ràng được kết hợp với mô hình. Chẳng hạn, bạn có thể chuyển đối tượng mô hình xe sang chế độ xem và sau đó để thay đổi "chế tạo" của phương tiện, hãy làm điều này:
vehicle.make = bicycleMakeField.getText();
Điều này sẽ giảm 15 dòng mã hiện CHỈ được sử dụng để đặt chế tạo của chiếc xe ở một nơi, thành một dòng mã có thể đọc được. (Và vì loại hoạt động này được thực hiện hàng trăm lần trong suốt ứng dụng, tôi nghĩ rằng nó sẽ là một chiến thắng lớn cho khả năng đọc cũng như an toàn.)
Cập nhật
Trưởng nhóm của tôi và tôi đã cấu trúc lại khung theo cách chúng tôi muốn thực hiện bằng cách sử dụng kiểu gõ tĩnh, thông báo cho giáo sư và cuối cùng đưa cho anh ta bản demo. Anh ấy đủ hào phóng để cho chúng tôi sử dụng khuôn khổ của mình miễn là chúng tôi không yêu cầu anh ấy giúp đỡ, và liệu chúng tôi có thể giữ cho phần còn lại của nhóm chúng tôi tăng tốc - điều đó có vẻ công bằng với chúng tôi.