|
||
Awell-designed Enterprise Architecture should meet the following goals.
Be robust
Be performing and scalable
Take advantage of OO designprinciples
OO designprinciples offer proven benefits for complex systems. Good OO design practiceis promoted by the use of proven design patterns - recurring solutions tocommon problems. It's vital that we use J2EE to implement OO designs, ratherthan let our use of J2EE dictate object design. Today there's a whole"J2EE patterns" industry. While many "J2EE patterns" arevaluable, classic (non-technology-specific) design patterns are more so, andstill highly relevant to J2EE.
Avoid unnecessary complexity
Practitionersof Extreme Programming (XP) advocate doing "the simplest thing that couldpossibly work". We should be wary of excessive complexity that mayindicate that application architecture isn't working. Due to the range ofcomponents on offer, it's tempting to over-engineer J2EE solutions, acceptinggreater complexity for capabilities irrelevant to the business requirements.Complexity adds to costs throughout the software lifecycle and thus can be aserious problem. On the other hand, thorough analysis must ensure that we don'thave a na've and simplistic view of requirements.
Be maintainable and extensible
Maintenanceis by far the most expensive phase of the software lifecycle. It's particularlyimportant to consider maintainability when designing J2EE solutions, becauseadopting J2EE is a strategic choice. J2EE applications are likely to be a keypart of an organization's software mix for years, and must be able toaccommodate new business needs.
Maintainability and extensibility depend largely on clean design. We need toensure that each component of the application has a clear responsibility, andthat maintenance is not hindered by tightly-coupled components.
Be delivered on time
Productivityis a vital consideration, which is too often neglected when approaching J2EE.
Be easy to test
Testingis an essential activity throughout the software lifecycle. We should considerthe implications of design decisions for ease of testing.
Promote reuse
Support for multiple client types
There'san implicit assumption that J2EE applications always need to support multipleJ2EE-technology client types, such as web applications, standalone Java GUIsusing Swing or other windowing systems or Java applets. However, such supportis often unnecessary, as "thin" web interfaces are being more andmore widely used, even for applications intended for use within an organization(ease of deployment is one of the major reasons for this).
Portability