Là một tài liệu mô tả kiến ​​trúc có vi phạm Nguyên tắc DRY không?


11

Nguyên tắc DRY (Đừng lặp lại chính mình) nói rằng "mỗi phần kiến ​​thức phải có một đại diện duy nhất, rõ ràng, có thẩm quyền trong một hệ thống." Hầu hết thời gian này đề cập đến mã, nhưng nó cũng thường được mở rộng cho tài liệu.

Người ta nói rằng mọi hệ thống phần mềm đều có kiến ​​trúc cho dù bạn có chọn nó hay không. Nói cách khác, phần mềm bạn xây dựng có cấu trúc và cấu trúc "như được xây dựng" là kiến ​​trúc của phần mềm. Vì một hệ thống phần mềm được xây dựng đi kèm với một kiến ​​trúc, việc tạo ra một mô tả kiến ​​trúc của hệ thống đó có vi phạm Nguyên tắc DRY không? Rốt cuộc, nếu bạn cần biết kiến ​​trúc thì bạn luôn có thể nhìn vào mã ...


Bạn có thực sự tin rằng bạn có thể nhận ra kiến ​​trúc bằng cách nhìn vào mã? Mã này sẽ cho bạn biết tất cả các yêu cầu chức năng và không chức năng, sự đánh đổi kiến ​​trúc, vấn đề triển khai, bối cảnh kinh doanh, tình huống sử dụng, v.v.? Nếu bạn mã có thể THẬT SỰ nói với bạn điều đó, thì đó là một hệ thống tầm thường.
luis.espinal

@ luis.espinal, Có thể phân biệt cấu trúc tĩnh và động từ mã và hệ thống đang chạy tương ứng. Việc các cấu trúc đó có tương đương với kiến ​​trúc của một hệ thống hay không sẽ phụ thuộc vào trường phái tư tưởng của bạn. Như bạn đã chỉ ra, bạn vẫn còn thiếu một số khối lớn bao gồm bất kỳ trình điều khiển kiến ​​trúc và lý do đằng sau các quyết định thiết kế.
Michael

Trường phái tư tưởng thực sự nào đánh đồng các cấu trúc dẫn xuất mã với kiến ​​trúc của một hệ thống? Nếu chúng ta biết rằng chúng ta sẽ bỏ lỡ một số khối lớn bao gồm bất kỳ trình điều khiển kiến ​​trúc nào, thì chúng ta đang thiếu toàn bộ kiến ​​trúc. Điều này chứng minh một cách tầm thường rằng các cấu trúc tĩnh và động có thể được phân biệt từ mã không đại diện cho toàn bộ kiến ​​trúc (độc lập với trường phái tư tưởng.) Nếu chúng ta xem xét các định nghĩa khá rõ về hệ thống và kiến ​​trúc phần mềm (ví dụ như SEI hoặc THU NHẬP), họ rõ ràng trong mã đó chỉ là một phần của kiến ​​trúc.
luis.espinal

trường hợp tại điểm. Kiến trúc của một hệ thống có thể yêu cầu tôi triển khai trên một số máy cụ thể, với các giao diện bên ngoài được tắt và bật theo một thứ tự cụ thể. Các cấu trúc tĩnh và động có nguồn gốc từ mã sẽ khó nắm bắt được điều đó (nếu có.) Tuy nhiên, rõ ràng đây là một phần của các khía cạnh triển khai và vận hành của kiến ​​trúc hệ thống. Và bất kỳ cấu trúc dẫn xuất mã nào sẽ chỉ liên quan đến việc thực hiện các khía cạnh tĩnh của kiến trúc ứng dụng phần mềm (hoặc thành phần). Nó không bao giờ có thể cho một kiến trúc hệ thống .
luis.espinal

1
@ luis.espinal, tôi mời bạn gửi câu trả lời cho câu hỏi này! Có vẻ như bạn mang lại một viễn cảnh tuyệt vời mà tôi nghĩ sẽ thêm một số giá trị thực sự cho chủ đề này. Bạn đang giảng cho dàn hợp xướng về vấn đề này, vậy tại sao không tạo ra một câu trả lời giải thích đầy đủ suy nghĩ của bạn để mọi người có thể hưởng lợi? Đó là lý do tại sao tôi đặt câu hỏi ở nơi đầu tiên.
Michael

Câu trả lời:


11

Việc sao chép suy nghĩ của bạn vào mã có vi phạm nguyên tắc DRY không?

Geez, nếu bạn chỉ có thể biết kiến ​​trúc bằng cách xem mã, sẽ không có những thứ như "tài liệu mô tả kiến ​​trúc" ở nơi đầu tiên. Đây không phải là một sự lặp lại, đó là một mức mô tả hệ thống khác , không thể suy diễn một cách tầm thường từ mã và ngược lại. Vì vậy, nó có toàn quyền tồn tại ngay cả khi bạn ôm DRY.


7

Đừng coi DRY là một quy tắc khó và nhanh. Đó là một điều tốt, nhưng bạn chỉ có thể ước chừng nó trong thực tế.

Ngoài ra tôi nghĩ rằng nó không được viết tốt. "Đừng lặp lại chính mình" dường như không đề cập đến trường hợp quan trọng không kém là để thực hiện thay đổi ngữ nghĩa hoặc chức năng, bạn sẽ phải chỉnh sửa văn bản nguồn ở nhiều nơi, nói những điều khác nhau nhưng được phối hợp.

Thay vì coi đó là một điều răn không được vi phạm, tốt hơn là nên hiểu tại sao đó là một ý tưởng tốt và đưa ra những lựa chọn hợp lý về nó. Lý do thật tệ khi phải chỉnh sửa phối hợp ở nhiều nơi là bạn, biên tập viên, mắc lỗi. Bạn không đáng tin cậy 100% để thực hiện các thay đổi mà không có lỗi. Nếu bạn phải thực hiện 10 thay đổi văn bản nguồn khác nhau và bạn chỉ nhận được 9 trong số đó là đúng, bạn đã gặp phải một lỗi . Đó là lý do tại sao sắp xếp văn bản nguồn để giảm thiểu số lượng thay đổi phối hợp là một điều tốt. Nó giảm thiểu lỗi.

Chúng tôi không thuộc về một tôn giáo trong đó DRY là một trong những điều răn. Nó chỉ là một cách tiện dụng, mặc dù hơi sai lệch, để gói gọn một số ý nghĩa thông thường.


4

Một kiến trúc mô tả, hoặc thiết kế phần mềm Mô tả không vi phạm DRY. Tuy nhiên, trong một tổ chức lớn, nơi các dự án vào năm ngoái, các nhà phát triển đến và đi, và hệ thống này quá lớn đối với bất kỳ ai để giữ tất cả các chi tiết trong đầu, đó là một tài liệu quan trọng. Lượng "lặp lại" cần thiết để giữ cho nó đồng bộ là hoàn toàn xứng đáng với công sức mà nó tiết kiệm được trong lần cập nhật hoặc bảo trì tiếp theo.


1
Đó là một sự hiểu lầm hoặc ứng dụng mù quáng của DRY. Một mô tả kiến ​​trúc không phải là một vi phạm của nó. Nếu một người mù quáng áp dụng DRY theo cách này, thì bất cứ điều gì ngoại trừ mã là vi phạm nó ... và rõ ràng đây không phải là ý định của những người nghĩ ra ý tưởng về nó.
luis.espinal

2

Một mô tả kiến ​​trúc không vi phạm nguyên tắc DRY.

Hệ thống phần mềm của bạn đi kèm với một kiến ​​trúc, chắc chắn. Và nó trải rộng trên nhiều tệp, trong nhiều lớp, với nhiều chi tiết không liên quan và không cần thiết cho tổng quan.

Tài liệu kiến ​​trúc của bạn nên giống như đoạn đầu tiên của một báo cáo tin tức: đó là một phác thảo, tóm tắt, lộ trình của dự án.


1

Nếu bạn hẹn hò với tài liệu, thì nó sẽ mô tả kiến ​​trúc tại thời điểm viết.

Trong khi đó mã đại diện cho kiến ​​trúc tại thời điểm hiện tại.

Hai điều riêng biệt - không phải cùng một kiến ​​thức.

Miễn là bạn nói rằng tài liệu đại diện cho kiến ​​trúc tại thời điểm viết, bạn không sao chép kiến ​​thức IMO bởi vì kiến ​​thức khác nhau nếu đó là về hệ thống tại một thời điểm khác.


Mã không bao giờ đại diện cho kiến ​​trúc. Nó chỉ là một biểu hiện của kiến ​​trúc. Mã đã được thay đổi ngày hôm nay vẫn có thể đại diện cho kiến ​​trúc của ngày hôm qua. Hơn nữa, nó có thể không đại diện cho kiến ​​trúc dự định (hoặc yêu cầu theo hợp đồng), đó là điều bạn phải lo lắng nhất. Mã không cho bạn biết nếu nó đúng hay sai, chỉ có điều nó chạy. Để biết nó đúng hay sai, bạn phải xem kiến trúc dự định và các yêu cầu thúc đẩy hệ thống bắt đầu.
luis.espinal
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.