Ở trung tâm của DCI là công cụ nhận thức mà công cụ cung cấp cho nhà phát triển. Tôi không chắc chắn nếu bạn đã nhìn thấy tất cả các bài giảng tuyệt vời James Coplien/Trygve Reenskaug, nhưng tôi sẽ cố gắng để chưng cất ý chính của nó cho bất cứ ai mới đến các khái niệm. Đó là về việc di chuyển hành vi hệ thống ra khỏi các đối tượng miền tương tác của hệ thống (các thực thể dữ liệu, hoặc hệ thống là gì), và vào các đối tượng hành vi (những gì hệ thống làm) như là các công dân hạng nhất làm trung gian cộng tác giữa các đối tượng bằng cách tiêm chúng với chức năng trong bối cảnh của một trường hợp sử dụng chỉ trong thời gian.
Hãy suy nghĩ BDD. Chúng tôi mã hóa hành vi không phải trên nhiều đối tượng như các hạt của chức năng trải rộng trên tất cả các đối tượng dữ liệu được kết hợp với lớp kiên trì, nhưng trong các đối tượng cố kết chỉ tồn tại cho một trường hợp sử dụng (câu chuyện). tương tác của các đối tượng dữ liệu câm này. Giống như các lớp tuyệt đối của một kiến trúc vật lý, các đối tượng dữ liệu thay đổi từ từ không được tải lên với việc triển khai tính năng thay đổi nhanh chóng mà chúng mang theo mọi lúc. Thay vào đó, Ruby cung cấp cho chúng ta khả năng dễ dàng tiêm các hành vi vào các đối tượng trong thời gian chạy khi/nếu cần thiết chỉ trong ngữ cảnh của một ca sử dụng. Như một ví dụ trong ROR, nếu bạn có một hành động điều khiển liên quan đến một trường hợp sử dụng, trong đó có một ma trận xác suất sự kiện, nơi hầu hết các mục có thể được kích hoạt chỉ trong một tỷ lệ nhỏ yêu cầu, sau đó instantiating một mạng của hành vi cồng kềnh các đối tượng cực kỳ có kiến thức để thực hiện mọi sự kiện cho mọi trường hợp sử dụng có thể có của dữ liệu là không cần thiết. Ngoài ra, không phải đào sâu qua 18 tệp trong trình soạn thảo văn bản của tôi để hiểu cách hoạt động của tương tác đó so với việc tất cả logic được trừu tượng hóa rõ ràng thành các mẫu trong giao diện được cung cấp bởi đối tượng ngữ cảnh là một dấu cộng nhất định.
Về câu hỏi của bạn về lớp trừu tượng 'khác' giữa bộ điều khiển và mô hình trong đường ray, tôi không chắc bạn đang nói đến cái nào khác. Bất kể, Vâng. Bằng mọi cách. Không vấn đề gì. Các nguyên tắc Design patterns và Uncle Bobs 'SOLID thường được chấp nhận là thực tiễn tốt nhất trong thiết kế OO. Cả hai yếu tố này đều khuyến khích mạnh mẽ sự trừu tượng hóa lỏng lẻo giữa chính sách và thực hiện. Cả hai đều giúp tránh các bãi não bị phá hủy của đế chế phá hoại đế chế La Mã, bởi vì chúng cung cấp một khuôn khổ chung mà mọi người đều hiểu. DCI, đối với tôi, cung cấp cùng một loại khung nhận thức, nhưng để làm cho một hệ thống dễ hiểu và đối phó hiệu quả hơn, và đây là chén thánh cho bất kỳ nhà thiết kế theo định hướng đối tượng nào.
Nguồn
2012-05-12 02:38:50
câu hỏi của bạn là vô cùng rộng lớn và có cho rất khó để trả lời. Có khá nhiều nơi có vẻ như bạn đã không nhận được những gì DCI đang làm cho nó thậm chí còn khó khăn hơn để trả lời một số câu hỏi trong bối cảnh DCI. Tôi có thể giúp bạn với các công cụ DCI nếu đó là mục tiêu nhưng bạn cần phải thu hẹp phạm vi sau đó –
Tôi chủ yếu muốn hiểu những gì * là * DCI. Đối với việc thực hiện Rails, một ví dụ đơn giản hoặc thậm chí là một giải thích hai dòng sẽ là tuyệt vời. – GeReV
Câu hỏi hay. Tôi không biết cho đến khi đọc điều này rằng có một cái tên cho mô hình mà tôi đã khao khát chỉ trong thời gian gần đây.Tôi đã nhìn vào mã tôi duy trì (mà tôi đã không viết) và suy nghĩ "Điều này cần là phân chia theo lớp giữa dữ liệu và hành vi." Tôi đoán đây chính là điều mà DCI đang cố gắng làm. –