Augmentation de la cohésion et de la diminution de couplage n'mener à bien la conception de logiciels.
La cohésion des partitions de votre fonctionnalité de sorte qu'il est concis et plus proche des données qui le concernent, tandis que le découplage assure que la fonctionnelle de la mise en œuvre est isolé du reste du système.
Le découplage permet de changer la mise en œuvre sans affecter d'autres parties de votre logiciel.
La cohésion s'assure que la mise en œuvre plus spécifiques à la fonctionnalité et à la même temps plus facile à maintenir.
La méthode la plus efficace de diminuer le couplage et la cohésion croissante est la conception d'une interface.
Qui est fonctionnelle majeure objets ne doit "connaître" les uns les autres par le biais de l'interface(s) qu'ils mettent en œuvre. La mise en œuvre d'une interface introduit la cohésion comme une conséquence naturelle.
Bien que n'étant pas réaliste dans certains senarios il devrait être un objectif de conception de travailler en.
Exemple (très sommaire):
public interface IStackoverFlowQuestion
void SetAnswered(IUserProfile user);
void VoteUp(IUserProfile user);
void VoteDown(IUserProfile user);
}
public class NormalQuestion implements IStackoverflowQuestion {
protected Integer vote_ = new Integer(0);
protected IUserProfile user_ = null;
protected IUserProfile answered_ = null;
public void VoteUp(IUserProfile user) {
vote_++;
// code to ... add to user profile
}
public void VoteDown(IUserProfile user) {
decrement and update profile
}
public SetAnswered(IUserProfile answer) {
answered_ = answer
// update u
}
}
public class CommunityWikiQuestion implements IStackoverflowQuestion {
public void VoteUp(IUserProfile user) { // do not update profile }
public void VoteDown(IUserProfile user) { // do not update profile }
public void SetAnswered(IUserProfile user) { // do not update profile }
}
Certains où ailleurs dans votre base de code, vous pouvez avoir un module qui traite des questions indépendamment de ce qu'ils sont:
public class OtherModuleProcessor {
public void Process(List<IStackoverflowQuestion> questions) {
... process each question.
}
}