Làm thế nào để bạn giải thích Tách biệt mối quan tâm với người khác?


33

Nếu bạn có một đồng nghiệp không hiểu lợi ích của Tách biệt mối quan tâm hoặc không hiểu nó đủ để áp dụng nhất quán trong công việc hàng ngày của họ, bạn sẽ giải thích điều đó với họ như thế nào?


Tìm thấy một số ví dụ hay trên Wikipedia: en.wikipedia.org/wiki/Separation_of_concerns
AliN11

Câu trả lời:


47

Hãy tưởng tượng bạn có một chương trình đã được phát hành. Một khách hàng xuất hiện và đề nghị trả tiền cho bạn để cải tiến một trong những tính năng của nó. Để có được tiền, bạn sẽ cần thay đổi chương trình của mình để thêm tính năng mới. Một số điều sẽ ảnh hưởng đến tỷ suất lợi nhuận của bạn là:

  1. bạn phải thay đổi bao nhiêu mã
  2. thật dễ dàng để thực hiện các thay đổi
  3. khả năng bạn phá vỡ các tính năng hiện có đang được sử dụng bởi các khách hàng khác
  4. bạn có thể tái sử dụng bao nhiêu mô hình / kiến ​​trúc hiện có

Tách biệt mối quan tâm giúp bạn có được câu trả lời tích cực hơn cho những câu hỏi này.

  1. nếu tất cả các mã cho một hành vi cụ thể của ứng dụng được tách ra, thì bạn sẽ chỉ phải thay đổi mã được liên kết trực tiếp với tính năng mới của bạn. Mà nên ít mã để thay đổi.
  2. nếu các hành vi bạn quan tâm được tách biệt gọn gàng với phần còn lại của ứng dụng, nhiều khả năng bạn sẽ có thể trao đổi trong một triển khai mới mà không cần phải hiểu hoặc thao tác hoàn toàn với phần còn lại của chương trình. Nó cũng sẽ dễ dàng hơn để tìm ra mã bạn cần thay đổi.
  3. Mã mà bạn không phải thay đổi sẽ ít bị phá vỡ hơn mã mà bạn thay đổi. Vì vậy, việc phân tách các mối quan tâm giúp bạn tránh bị hỏng trong các tính năng không liên quan bằng cách ngăn bạn khỏi phải thay đổi mã mà họ có thể gọi. Nếu các tính năng của bạn bị trộn lẫn với nhau, bạn có thể thay đổi hành vi của một người một cách tình cờ trong khi cố gắng thay đổi một tính năng khác.
  4. Nếu kiến ​​trúc của bạn không rõ ràng về chi tiết logic kỹ thuật hoặc kinh doanh thì các thay đổi đối với việc triển khai sẽ ít có khả năng yêu cầu các tính năng kiến ​​trúc mới. Ví dụ: nếu logic miền chính của bạn là cơ sở dữ liệu bất khả tri thì việc hỗ trợ cơ sở dữ liệu mới sẽ dễ dàng như việc hoán đổi trong một triển khai mới của lớp kiên trì.

1
Tôi thích rằng bạn đã thực hiện câu trả lời vững chắc trong thực tế tài chính. Các nhà quản lý không có lý do gì để cẩu thả và bỏ qua khái niệm cơ bản này.
psychboom

10

Nhìn vào một bệnh viện, và suy nghĩ về tất cả các vai trò khác nhau có liên quan đến việc chăm sóc bệnh nhân: y tá, bác sĩ, trợ lý y tế, kỹ thuật viên, nhân viên văn thư, nhà ăn, v.v.

Có ai biết làm thế nào tất cả những người đó hoàn thành công việc của họ không? Không, bởi vì nó sẽ áp đảo. Họ phải tách các trách nhiệm khác nhau thành các vai trò riêng biệt và các điểm tiếp xúc giữa các vai trò đó rất cụ thể.


5

Nếu anh ấy / cô ấy làm việc trong một văn phòng, hãy lấy nó làm ví dụ, giải thích vai trò của từng nhân viên trong văn phòng đó và hỏi anh ấy, chuyện gì sẽ xảy ra, nếu những nhân viên đó không chia theo công việc của họ?


1

Tôi sẽ xem xét cách anh ta thất bại trong việc áp dụng SoC trong mã / thiết kế của mình và biến điều đó thành một ví dụ thực tế mà anh ta có thể liên quan và điều đó rõ ràng là không mong muốn.

Ví dụ: nếu anh ta có một lớp mà khách hàng cần cung cấp một số thông tin không phù hợp với những khách hàng đó, thì tôi sẽ sử dụng sự tương tự của một tiệm bánh nơi bạn phải mang theo ngũ cốc và men của riêng mình nếu bạn muốn mua một cái bánh mì


-3

Một ví dụ có thể là nhà phát triển html có thể muốn tách html, css và javascript thành các tệp riêng biệt. Bằng cách này, bạn có thể thay đổi giao diện của một cái gì đó bằng cách sửa đổi css hoặc hành vi của một cái gì đó bằng cách thay đổi tệp javascript được tải riêng. Nếu bạn có một trang web đáp ứng hoặc thích ứng, mô hình này hoạt động tốt vì bạn có thể tải các css hoặc javascript khác nhau tùy thuộc vào chế độ xem người dùng hoặc tác nhân người dùng. Tuy nhiên, nếu bạn sửa đổi html hoặc mẫu, rất có thể css hoặc javascript có thể bị hỏng. Những mối quan tâm riêng biệt cũng có thể phụ thuộc.

Một cách tiếp cận khác là gói tất cả javascript và html css của bạn vào một nhóm các thành phần hoặc mô-đun. Điều này có nghĩa là bạn có thể thay đổi một mô-đun và nó sẽ không ảnh hưởng đến các thành phần hoặc mô-đun khác trên trang mà nó chạy dọc theo đó không liên quan. Ở đây các tập tin css, js và html được hợp nhất thành một thành phần duy nhất có thể được kiểm tra đơn vị. Vì vậy, việc phân tách các mối quan tâm đến dưới dạng các thành phần nguyên tử riêng lẻ có thể được kiểm tra đơn vị thay vì tách các yếu tố đánh dấu, kiểu dáng và hành vi. Cách tiếp cận thứ hai này phù hợp hơn để tạo các ứng dụng web phức tạp hơn.

chỉnh sửa. Vì tôi đã nhận được phản hồi tiêu cực cho nhận xét này, tôi nghĩ rằng tôi sẽ xem lại nó và cố gắng để đủ điều kiện một số POV của tôi. Thật không may, bất kỳ phản hồi nào ở đây không đặc biệt mang tính xây dựng nhưng tôi đã thấy một cuộc thảo luận thú vị ở nơi khác nhìn vào React, công nghệ nóng hiện tại trong phát triển web, một ví dụ trong thế giới thực và hỏi liệu nó có phá vỡ mối quan tâm hay cụ thể là nếu nó phá vỡ một trong những nguyên lý của phương pháp thiết kế hướng đối tượng RẮN của Feather.

Phối cảnh nhà phát triển JavaScript kỹ thuật

NO, because JSX is a view language. That's one responsibility.
BUT, this implies that the JS developer is self-enforcing SoC/SRP on his own      architecture by not mixing ViewModel concerns in his JSX. This type of vigilance "in the wild" is highly suspect because JSX involves the full JavaScript dialect.

Phối cảnh thiết kế UX / UI

YES, because JSX mixes Semantic Content (Model) with Behavior (Controller)
YES, because the intrusion, specifically of JavaScript, into the Semantic Model makes it difficult or impossible for me to play my role and leverage my expertese and skills.

Quan điểm của đội

NO, if both...
Separate files are used for the View (JSX) and ViewModel (JS).
Either there aren't UI/UX/Designers involved, or they are productive working    directly with JSX (not very common).
YES, if either...
Everything is in the same file, causing problems for version control or productive use of modern editors.
Members of the team who are comfortable with HTML/CSS but less capable with JavaScript are excluded because of mixture or roles.

https://hashnode.com/post/does-react-really-violate-separation-of-concern-by-pocking-html-and-js-in-a-single-file-cil3bn5hj0011a65347rsdut0

Ngoài ra trên trang còn có liên kết đến một bài thuyết trình thú vị từ Pete Hunt, của Facebook, nơi anh nói về các thành phần không phải là mẫu và tách biệt các mối quan tâm trong ứng dụng ngôn ngữ thay vì tách biệt các mối quan tâm của khung, ví dụ như mẫu, css và javascript v.v.

Liên quan đến việc tách các mối quan tâm của bạn bằng ngôn ngữ của ứng dụng của bạn, điều này có thể liên quan đến việc sử dụng các mẫu khác nhau để tách hoặc tách mã của bạn thành dạng mô-đun có thể được kiểm tra đơn vị, v.v.

Vì vậy, để tóm tắt, tách biệt mối quan tâm có thể phụ thuộc vào vai trò hoặc quan điểm của bạn, như đã đề cập ở nơi khác.


1
điều này dường như không cung cấp bất cứ điều gì đáng kể qua các điểm được thực hiện và giải thích trong 7 câu trả lời trước
gnat

Tôi chỉ chỉ ra rằng tách biệt các mối quan tâm có thể có các cách tiếp cận khác nhau tùy thuộc vào bối cảnh. Điều này gần với một tình huống trong thế giới thực trong các kỹ thuật phần mềm và tôi nhấn mạnh rằng có những cách tiếp cận khác nhau mà bạn có thể thực hiện khi làm việc trên các trang html lúc đầu có vẻ mâu thuẫn.
Daniel
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.