Principles for Developing Application Frameworks
In the software engineering industry, the term of application framework is used to describe a set of reusable designs and code that can assist in the development of software applications.
An application framework provides developers with a structure and template that they can use as a baseline to build their applications. Such a framework often consists of abstract classes, concrete classes, and predefined interaction among the classes throughout the framework. Developers can then build the application on top of the framework and reduce the development effort through reuse of code and designs provided in the framework. The following figure provides a high level overview on how an application framework relates to a business application.
The concept of the application framework is not new, and various types of frameworks have been around for a couple of decades. Some of the well-known frameworks are Sun's Java environment and Microsoft's .NET Framework environment. People who work with Java or .NET can fully appreciate the benefits what those two frameworks have offered to application development. Java and .NET are both frameworks that target all types of applications, and thus such frameworks must not contain any business-domain-related classes and designs. However, there exist frameworks that sit on top of such generic frameworks and provide services and expertise for certain specific business domains, such as supply chain systems and financial applications.
Clearly, developing an application framework is not an easy and inexpensive effort. In order to develop a highly usable and extensible framework, you need first to find individuals who are not only expert in the business domain, but also expert in software design and development. It is important that those who are developing the framework be competent in both business knowledge and software development:
So finding people who have expertise in both the business domain and software development is the first hurdle to leap over in the development of a high-quality framework.
In addition to the above significant human resource demands, you also need to follow five important principles to develop a highly usable and extensible framework: Modularity, Reusability, Extensibility, Simplicity, and Maintainability.
The postings in this topic will explain each of them, stay tuned...
Modularity, the division of an application framework into structural components, or modules, allows the framework developers to implement the application framework in a piece-by-piece fashion. By dividing the framework into modules, we can maximize productivity by assigning a developer the specific part of the application framework that would benefit most from that developer's expertise.
Similarly, other framework developers who use one component of the application framework in their module development are shielded from potential changes to other parts of the framework. As they build components on top of the other components in the framework, their development is better insulated from changes occurring in other parts of the application framework, resulting in a significant boost to their productivity and a reduction in the amount of time spent on fixing code affected by other parts of the application framework.
Reusability of code is one of the most important principles of application framework development. Externally application framework is described as a set of reusable designs and code; internally the application framework may also contain many layers. Each layer makes certain assumptions about the business the application is intended to serve. The bottom layer consists of framework components that make no assumptions about the business. They are also the most generic components in the framework. As you move higher up the stack of the layers, its components depend on the services provided by the previous layers. This reusable design reduces the amount of duplicate code the framework developers have to write and maintain, and significantly boosts their productivity.
For application developers, an application framework provides such reusability to the application built on top of it not only by sharing its classes and code, but by sharing its designs as well.
Extensibility, the ability to add custom functionalities to the existing framework, allows the application developers not only to use the framework component "out of the box," but also to alter the components to suit a specific business scenario. Extensibility is an important feature for the framework. Each business application is unique in its business requirements, architecture, and implementation. It is impossible for a framework to accommodate such variation by itself, but if a framework is designed in such way that it leaves room for some customization, then different business applications can still use the generic features of the framework, yet at the same time developers will have the freedom to tailor their applications to the unique business requirements by plugging the customized logic into the framework. With a high degree of extensibility, the framework itself can become more applicable to different types of business applications. However, in creating a framework, its extensibility should always be determined in the context and assumptions of the application you are trying to develop. Each time you increase the extensibility of the framework, your developers may need to write more code and require more detailed knowledge about how the framework operates, which will have a negative impact on their productivity. An extreme scenario of a highly extensible framework is Microsoft's .NET framework itself, which is designed for development of a wide variety of applications. Indeed, there are few constraints in developing applications using the .NET framework, but as a result, you lose the benefits of what an application framework can provide. The key is to add the flexibility and extensibility to the places in the framework that are more likely to change in the particular type of application you are developing.
© 2020 Digcode.com. All rights reserved.