TechNet
Products
IT Resources
Downloads
Training
Support
Products
Windows
Windows Server
System Center
Microsoft Edge
Office
Office 365
Exchange Server
SQL Server
SharePoint Products
Skype for Business
See all products »
Resources
Channel 9 Video
Evaluation Center
Learning Resources
Microsoft Tech Companion App
Microsoft Technical Communities
Microsoft Virtual Academy
Script Center
Server and Tools Blogs
TechNet Blogs
TechNet Flash Newsletter
TechNet Gallery
TechNet Library
TechNet Magazine
TechNet Wiki
Windows Sysinternals
Virtual Labs
Solutions
Networking
Cloud and Datacenter
Security
Virtualization
Updates
Service Packs
Security Bulletins
Windows Update
Trials
Windows Server 2016
System Center 2016
Windows 10 Enterprise
SQL Server 2016
See all trials »
Related Sites
Microsoft Download Center
Microsoft Evaluation Center
Drivers
Windows Sysinternals
TechNet Gallery
Training
Expert-led, virtual classes
Training Catalog
Class Locator
Microsoft Virtual Academy
Free Windows Server 2012 courses
Free Windows 8 courses
SQL Server training
Microsoft Official Courses On-Demand
Certifications
Certification overview
Special offers
MCSE Cloud Platform and Infrastructure
MCSE: Mobility
MCSE: Data Management and Analytics
MCSE Productivity
Other resources
Microsoft Events
Exam Replay
Born To Learn blog
Find technical communities in your area
Azure training
Official Practice Tests
Support options
For business
For developers
For IT professionals
For technical support
Support offerings
More support
Microsoft Premier Online
TechNet Forums
MSDN Forums
Security Bulletins & Advisories
Not an IT pro?
Microsoft Customer Support
Microsoft Community Forums
Sign in
Home
Library
Wiki
Learn
Gallery
Downloads
Support
Forums
Blogs
Resources For IT Professionals
United States (English)
Россия (Pусский)
中国(简体中文)
Brasil (Português)
Skip to locale bar
Post an article
Translate this page
Powered by
Microsoft® Translator
Wikis - Page Details
First published by
Abhishek.Sur
When:
23 Jun 2013 1:38 PM
Last revision by
Benoit Jester [MVP]
(MVP, Microsoft Community Contributor)
When:
11 Nov 2013 1:48 AM
Revisions:
3
Comments:
0
Options
Subscribe to Article (RSS)
Share this
Engage!
Wiki Ninjas Blog
(
Announcements
)
Wiki Ninjas on Twitter
TechNet Wiki Discussion Forum
Can You Improve This Article?
Positively!
Click Sign In to add the tip, solution, correction or comment that will help other users.
Report inappropriate content using
these instructions
.
Wiki
>
TechNet Articles
>
Package Cohesion Principle
Package Cohesion Principle
Article
History
Package Cohesion Principle
Softwares when released need to maintain certain design guidelines. While release of a number of classes into a package, it is important to know what classes should be placed in what package. There are three principles of Package Cohesion Principles that tries to help Software architects.
1. The Release Reuse Equivalency Principle
"The Granule of reuse is the granule of release"
When developing a reusable components, a class, or a cluster of classes it is important to consider that unless it is managed by a release of some kind, it cannot be fully utilized by the architects. Users will be unwilling to use the class if the author force to upgrade all the code that have been developed around the previous release needed to modify when an upgrade is released for the package. Therefore, one criteria is to package all the classes that are dependent on one another into one package and each package when released should individually support older versions.
2. The Common Closure Principle
"Classes that change together, belong together. "
It is important to note that every large project consists of huge inter-related packages. Each time a package is released, there need to be a number of tests, rebuilds and deployment needed to be performed. To minimize this hiccups, we need to group the packages that are dependent on one another together. This requires a certain amount of precedence as we need to anticipate beforehand what are the changes that needed to be made when one of the class in the package changes. Grouping the dependent packages together will minimize the release and deployment whoes.
3. The Common Reuse Principle
"Classes that aren't reused together should not be grouped together"
A dependency upon a package means a dependency upon everything inside the package. When a new package is released, every class of the package is being verified even if nothing has been used. For the classes that are not being used if clubbed together into one package, any change on their release could also need the other dependent package which even if not using the new update needed to be verified with the new release.
The three principles correspond to the Package Cohesion Principles are mutually exclusive and they cannot be simultaneously be satisfied.
See Also
Software Design Principles
Software Patterns and Practices