Nguyên tắc trách nhiệm duy nhất - Lớp học chỉ nên có một lý do để thay đổi. Nếu bạn có một lớp nguyên khối, thì có lẽ nó có nhiều hơn một lý do để thay đổi. Chỉ cần xác định một lý do của bạn để thay đổi và trở thành chi tiết chi tiết như hợp lý. Tôi sẽ đề nghị để bắt đầu "lớn". Tái cấu trúc một phần ba mã vào một lớp khác. Một khi bạn đã có, sau đó bắt đầu lại với lớp học mới của bạn. Đi thẳng từ một lớp đến lớp 20 là quá khó khăn.
Nguyên tắc mở/đóng - Một lớp học phải mở để mở rộng nhưng đóng để thay đổi. Khi hợp lý, hãy đánh dấu các thành viên và phương thức của bạn là ảo hoặc trừu tượng. Mỗi mục phải tương đối nhỏ trong tự nhiên và cung cấp cho bạn một số chức năng hoặc định nghĩa cơ bản về hành vi. Tuy nhiên, nếu bạn cần thay đổi chức năng sau này, bạn sẽ có thể thêm mã, thay vì thay đổi mã để giới thiệu chức năng mới/khác.
Nguyên tắc thay thế Liskov - Lớp học nên được thay thế cho lớp cơ sở của nó. Chìa khóa ở đây, theo ý kiến của tôi, là làm thừa kế một cách chính xác. Nếu bạn có một tuyên bố trường hợp rất lớn, hoặc hai trang của báo cáo nếu kiểm tra loại có nguồn gốc của đối tượng, sau đó bạn vi phạm nguyên tắc này và cần phải suy nghĩ lại cách tiếp cận của bạn.
Nguyên tắc phân đoạn giao diện - Theo tôi, nguyên tắc này gần giống với nguyên tắc về Trách nhiệm duy nhất. Nó chỉ áp dụng đặc biệt cho một giao diện lớp/cấp độ cao (hoặc trưởng thành). Một cách để sử dụng nguyên tắc này trong một lớp học lớn là làm cho lớp của bạn triển khai giao diện trống. Tiếp theo, thay đổi tất cả các loại sử dụng lớp của bạn là loại giao diện. Điều này sẽ phá vỡ mã của bạn. Tuy nhiên, nó sẽ chỉ ra chính xác cách bạn đang tiêu thụ lớp học của bạn. Nếu bạn có ba trường hợp, mỗi trường hợp sử dụng tập con của riêng họ về các phương thức và thuộc tính, thì bây giờ bạn biết rằng bạn cần ba giao diện khác nhau. Mỗi giao diện đại diện cho một tập hợp các chức năng, và một lý do để thay đổi.
Nguyên tắc đảo ngược phụ thuộc - Câu chuyện ngụ ngôn của phụ huynh/con khiến tôi hiểu điều này. Hãy suy nghĩ của một lớp cha mẹ. Nó định nghĩa hành vi, nhưng không quan tâm đến các chi tiết bẩn. Nó đáng tin cậy. Tuy nhiên, một lớp trẻ em là tất cả về các chi tiết và không thể phụ thuộc vào vì nó thay đổi thường xuyên. Bạn luôn muốn phụ thuộc vào cha mẹ, các lớp học có trách nhiệm, và không bao giờ theo cách khác. Nếu bạn có một lớp cha mẹ tùy thuộc vào một lớp con, bạn sẽ nhận được hành vi bất ngờ khi bạn thay đổi một cái gì đó. Trong tâm trí của tôi, đây là cùng một suy nghĩ của SOA. Hợp đồng dịch vụ xác định đầu vào, đầu ra và hành vi, không có chi tiết.
Tất nhiên, ý kiến và hiểu biết của tôi có thể không đầy đủ hoặc sai. Tôi sẽ đề nghị học hỏi từ những người đã nắm vững những nguyên tắc này, như Bác Bob. Một điểm khởi đầu tốt cho tôi là cuốn sách của ông, Agile Principles, Patterns, and Practices in C#.Một tài nguyên khác là Uncle Bob on Hanselminutes.
Tất nhiên, là Joel and Jeff pointed out, đây là những nguyên tắc chứ không phải quy tắc. Họ là những công cụ để giúp hướng dẫn bạn, không phải là luật đất đai.
EDIT:
Tôi chỉ tìm thấy những SOLID screencasts trông thực sự thú vị. Mỗi cái dài khoảng 10-15 phút.
Tôi là một fan hâm mộ lớn của Resharper, và đã sử dụng nó trong một thời gian dài, và tôi có một số phạm vi kiểm tra đơn vị, nhưng không đủ gần. Có cái gì đó cụ thể hơn để suy nghĩ về khi làm refactor? – Ash