text: Lessons to learn from the Hibernate Core implementation:
  -.
  from t in Types where t.IsInterface select t
  If our primary goal is to enforce low coupling, there’s a common mistake when using interfaces that could kill the utility of using them. It’s the using of the concrete classes instead of interfaces, and to explain better this problem let’s take the following example:
  The class A implements the Interface IA who contains the calculate() method, the consumer class C is implemented like that
  public class C { …. public void calculate() { ….. m_a.calculate(); …. } A m_a; }.
  C# introduced the explicit interface implementation capability to the language to ensure that a method from the IA will be never called from a reference to concrete classes, but only from a reference to the interface. This technique is very useful to protect developers from losing the benefit of using interfaces.
  With JArchitect we can check this kind of mistakes using CQLinq, the idea is to search.
  Cohesion
  The single responsibility principle states that a class should have one, and..