Tôi có hai lớp cơ sở, Operation
và Trigger
. Mỗi lớp có một số lớp con chuyên về một số loại hoạt động hoặc kích hoạt nhất định. A Trigger
có thể kích hoạt một cụ thể Operation
. Trong khi một Operation
có thể được kích hoạt bởi một cụ thể Trigger
.
Tôi cần phải viết mã ánh xạ một mã Operation
cho trước Trigger
(hoặc ngược lại), nhưng tôi không chắc chắn nên đặt mã đó ở đâu.
Trong trường hợp này, mã không rõ ràng thuộc về một lớp hoặc lớp khác. Vì vậy, theo nguyên tắc một trách nhiệm duy nhất, tôi không chắc mã nên thuộc về đâu.
Tôi có thể thấy ba tùy chọn sẽ làm việc tất cả. Trong khi 1 & 2 dường như chỉ là một sự lựa chọn về ngữ nghĩa, thì 3 đại diện cho một cách tiếp cận hoàn toàn khác.
- Trên kích hoạt, ví dụ
bool Triggers(Operation o)
. - Về hoạt động, ví dụ
bool TriggeredBy(Trigger t)
. - Trong một lớp hoàn toàn mới quản lý ánh xạ, ví dụ
bool MappingExists(Trigger t, Operation o)
.
Làm thế nào tôi nên quyết định nơi đặt mã ánh xạ được chia sẻ theo nguyên tắc trách nhiệm duy nhất?
Làm thế nào để quản lý trách nhiệm duy nhất khi trách nhiệm được chia sẻ?
Chỉnh sửa 1.
Vì vậy, mã thực tế trông như thế này. Tất cả các tài sản, hoặc là một string
, Guid
, collection<string>
, hoặc enum
. Chúng cơ bản chỉ là đại diện cho những mẩu dữ liệu nhỏ.
Chỉnh sửa 2.
Lý do cho kiểu trả về của bool. Một lớp khác sẽ tiêu thụ một bộ sưu tập Trigger
và một bộ sưu tập Operation
. Nó cần biết nơi ánh xạ tồn tại giữa a Trigger
và an Operation
. Nó sẽ sử dụng thông tin đó để tạo một báo cáo.