Tôi là một nhà phát triển cơ sở (~ 3 năm kinh nghiệm) và trong công việc của mình, chúng tôi đang trong quá trình kiến trúc một hệ thống mới. Nhà phát triển chính của tôi sẽ là kiến trúc sư chính, tuy nhiên anh ấy đã thách thức tôi thử tự mình thiết kế hệ thống (song song).
Trải qua một vài lần lặp lại ý tưởng và đề xuất những gì tôi thấy là đề xuất kiến trúc, sự dẫn dắt của tôi đã cho tôi phản hồi rằng hầu hết những gì tôi đang làm là "thiết kế" chứ không phải "kiến trúc".
Ông mô tả sự khác biệt khi kiến trúc là bất khả tri trong khi thiết kế là mô tả của việc thực hiện. Anh ấy nói tôi cần phải cởi mũ thiết kế của tôi và đội mũ kiến trúc sư của tôi. Anh ấy đã cho tôi một lời khuyên nhỏ về cách làm như vậy, nhưng tôi cũng muốn hỏi bạn:
Làm cách nào để thoát khỏi chế độ thiết kế phần mềm và bắt đầu suy nghĩ giống một kiến trúc sư hơn?
Dưới đây là một số ví dụ về "thiết kế" mà tôi đã đưa ra mà không được xem là có liên quan đến kiến trúc bởi sự dẫn dắt của tôi:
- Tôi đã đưa ra một thuật toán để tải và dỡ tài nguyên từ hệ thống của chúng tôi và khách hàng tiềm năng của tôi nói rằng các thuật toán này không phải là kiến trúc.
- Tôi đã đưa ra một tập hợp các sự kiện mà hệ thống sẽ đưa ra và theo thứ tự nó sẽ nâng chúng lên, nhưng điều này dường như cũng không cắt nó thành kiến trúc.
Tôi dường như bị cuốn vào các chi tiết và không lùi bước đủ xa. Tôi thấy rằng ngay cả khi tôi nghĩ ra thứ gì đó ở cấp độ kiến trúc, tôi vẫn thường đến đó bằng cách thử nhiều cách triển khai khác nhau và tìm hiểu chi tiết sau đó khái quát hóa và trừu tượng hóa. Khi tôi mô tả điều này với sự dẫn dắt của mình, anh ấy nói rằng tôi đã sử dụng sai phương pháp: tôi cần phải suy nghĩ "từ trên xuống" chứ không phải "từ dưới lên".
Dưới đây là một số chi tiết cụ thể hơn về dự án :
- Dự án chúng tôi đang kiến trúc là một ứng dụng web.
- Tôi đang ước tính khoảng 10 - 100 nghìn dòng mã.
- Chúng tôi là một khởi đầu. Đội ngũ kỹ thuật của chúng tôi có khoảng 3-5 người.
- Điều gần nhất tôi có thể so sánh ứng dụng của chúng tôi là một CMS nhẹ. Nó có độ phức tạp tương tự và chủ yếu liên quan đến tải và dỡ thành phần, quản lý bố cục và mô-đun kiểu trình cắm.
- Ứng dụng này là ajax-y. Người dùng tải xuống máy khách một lần sau đó yêu cầu dữ liệu vì nó cần nó từ máy chủ.
- Chúng tôi sẽ sử dụng mô hình MVC.
- Ứng dụng sẽ có xác thực.
- Chúng tôi không quan tâm lắm đến việc hỗ trợ trình duyệt cũ (whew!), Vì vậy chúng tôi đang tìm cách tận dụng những thứ mới nhất và tốt nhất hiện có và sẽ ra mắt. (HTML5, CSS3, WebGL?, Tiện ích mở rộng nguồn phương tiện và hơn thế nữa!)
Dưới đây là một số mục tiêu của dự án :
- Các ứng dụng cần phải mở rộng quy mô. Trong thời gian tới, người dùng của chúng tôi sẽ có thứ tự từ hàng trăm đến hàng nghìn, nhưng chúng tôi đang lên kế hoạch cho hàng chục nghìn đến hàng triệu và hơn thế nữa.
- Chúng tôi hy vọng ứng dụng sẽ tồn tại mãi mãi. Đây không phải là một giải pháp tạm thời. (Trên thực tế chúng tôi đã có một giải pháp tạm thời và những gì chúng tôi đang kiến trúc là sự thay thế lâu dài cho những gì chúng tôi có).
- Ứng dụng nên được bảo mật vì nó có thể có liên hệ với thông tin cá nhân nhạy cảm.
- Ứng dụng cần phải ổn định. (Lý tưởng nhất là nó sẽ ổn định ở mức độ của gmail nhưng nó không cần phải ở mức cực đoan của người đi trên sao Hỏa.)