Có thể ghép một cách lỏng lẻo một ứng dụng vào khuôn khổ của nó không?


14

Giả sử tôi đang phát triển một ứng dụng web. Lựa chọn đầu tiên của tôi là sử dụng PHP với Fat-Free Framework (F3) và mẫu MVC. Năm tới, tôi có thể quyết định tôi muốn chuyển sang Zend Framework, hoặc thậm chí là ASP.NET MVC. Liệu nó có ý nghĩa để thử và thiết kế ứng dụng của tôi theo cách mà nó được kết nối lỏng lẻo với khung của nó, hoặc là khung quá tách rời để thực hiện điều này?

Lý do duy nhất tôi hỏi là vì nó xuất hiện trong cuộc trò chuyện với một người ngang hàng gần đây, người đã chỉ trích chiếc bánh của tôi trên bầu trời ý tưởng về việc ghép lỏng ứng dụng của tôi với F3.


2
Tóm tắt đi các khái niệm ứng dụng của riêng bạn .
Vaughan Hilts

@VaughanHilts mọi người dường như đồng ý với bạn nhưng tôi không chắc ý của bạn là gì. Bạn có thể xây dựng?
David Kennedy

Câu trả lời:


29

Kết nối lỏng lẻo ứng dụng của bạn với khung của nó về cơ bản có nghĩa là bạn sẽ viết một khung proxy. Viết khung proxy đó là rất nhiều công việc và nếu bạn từng chuyển sang một khung mới, bạn sẽ phải làm rất nhiều việc để làm cho khung proxy hỗ trợ khung mới. Tất nhiên, các khung khác nhau sử dụng các thành ngữ và mẫu khác nhau, điều này sẽ làm cho khung proxy trở nên rất phức tạp (nếu bạn cố gắng làm cho nó phù hợp với mọi thứ) hoặc rất hạn chế (nếu bạn đi theo mẫu số chung thấp nhất). Dù bằng cách nào, bạn sẽ phải vật lộn với khung proxy đó.

Là có khả năng thay đổi khuôn khổ trên một giá trị tất cả những rắc rối này? Giống như tôi đã nói, bạn sẽ không thể thay đổi bất cứ điều gì vì bạn sẽ phải điều chỉnh khung proxy, điều này có thể sẽ hiệu quả hơn là điều chỉnh trực tiếp mã ứng dụng.


4
Việc bạn sử dụng thuật ngữ "khung proxy" đã giúp tôi làm rõ vấn đề.
David Kennedy

1
+1 cho câu trả lời này. Có nhiều lần mã hóa lại khung công tác mới có thể rẻ hơn nhiều so với việc tạo khung proxy - cũng là đầu cơ. Điều đó đang được nói, tôi nghĩ rằng toàn bộ điều chuyển đổi khung là hoàn toàn có thể và có ý nghĩa đối với các khung nơi bạn có 1) một vài điểm liên hệ với API và 2) điểm chung giữa các API của các khung khác nhau - nhưng tôi cho rằng điều đó chắc chắn là không trường hợp thường gặp
J Trana

5

Không thể làm.

Bạn có thể thiết kế theo cách di động trên các khung. MVC là MVC và các nguyên tắc gần như giống nhau với bất kỳ ngôn ngữ hoặc nền tảng nào được sử dụng.

Mã thực tế, tuy nhiên, sẽ rất phụ thuộc vào khuôn khổ hoặc ngôn ngữ. Cách duy nhất để trừu tượng bản thân khỏi đó là viết mã dựa trên khung trung gian. Sau đó, bạn có thể có thay đổi triển khai trung gian (từ F3 sang .NET?) Mà không thay đổi ứng dụng. Đó là rất nhiều công việc, giả định trừu tượng không rò rỉ, và chỉ di chuyển vấn đề mà không giải quyết nó: bây giờ bạn đang bị ràng buộc với khung trung gian của bạn.

Trên một lưu ý tích cực hơn: xem xét thể hiện một số thử nghiệm của bạn (kiểu BDD) trong một nền tảng độc lập với việc triển khai của bạn. Những người có thể sống sót viết lại lớn.


Thay đổi từ PHP sang .NET có lẽ không thực tế như bạn đã chỉ ra. Tôi đang suy nghĩ ở mức rất cao, trừu tượng, có thể sáng suốt.
David Kennedy

5

Tôi đã từng thấy Robert C. Martin nói chuyện trong đó anh ấy nói điều gì đó dọc theo dòng chữ "quyết định đầu tiên bạn đưa ra là quyết định khó nhất để thay đổi sau này".

Vì vậy, lời khuyên của tôi là cố gắng trì hoãn quyết định này nếu bạn chưa chắc chắn chính xác những gì bạn muốn sử dụng. Xác định các phần mà bạn có thể xác định ngay bây giờ và sẽ dễ dàng độc lập với bất kỳ khuôn khổ nào bạn kết thúc sử dụng.


Đó thực sự là một lời khuyên tốt!
David Kennedy

5

Khóa khung có thể là một vấn đề nghiêm trọng, nhưng nó giúp xem vấn đề là một trong những tính di động. Tính di động không phải là một thuộc tính tuyệt đối, nhưng liên quan đến điểm xuất phát của bạn và nơi bạn có thể muốn đi. Bằng cách tương tự, sau đó, phần mềm chỉ có thể mang theo khi bạn đã chuyển nó sang các môi trường khác.

Hầu hết sự phát triển của một ứng dụng bên trong một khung có xu hướng là mã keo, thứ gắn kết các thành phần của khung với nhau. Các tệp cấu hình có thể trừu tượng một lượng keo nhất định trong một số hệ thống nhưng rất nhiều chi tiết tốt phải được thực hiện trong mã.

Mặt khác, các quy tắc và quy trình kinh doanh có thể được trừu tượng hóa từ ứng dụng. Phần khó của sự trừu tượng là khi các quy tắc được thực hiện trực tiếp bởi khung; bảo mật, khả năng truy cập và trình tự quy trình có xu hướng được thi hành theo khuôn khổ của bạn và có thể khó thấy nhất.

Nếu bạn có thể tách phần keo của ứng dụng của bạn khỏi quy tắc kinh doanh và quy trình kinh doanh và phần dữ liệu kinh doanh, thì bạn sẽ có thể thực hiện một số phần của giải pháp của mình.


+1. Bằng cách trích xuất logic nghiệp vụ của bạn trong dịch vụ (web), bạn có thể cho phép bất kỳ ứng dụng nào sử dụng nó, giảm ứng dụng PHP MVC thành chỉ một GUI web thành logic kinh doanh của bạn, giúp dễ dàng thay thế toàn bộ.
CodeCaster

Thiết kế một dịch vụ web giống như thiết kế khung của riêng bạn. Ngoài ra, một số lượng đáng kể các quy tắc kinh doanh của bạn, đặc biệt là phần kỹ thuật thông tin, cần được thể hiện trong GUI.
BobDalgleish
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.