affiliate marketing Computers and Technology

الثلاثاء، 24 سبتمبر 2013

Software Architecture and Design - Goals, Principles and Some Key Considerations

Software Architecture and Design - Goals, Principles and Some Key Considerations

Definition:
Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman derived and refined a definition of architecture based on work by Mary Shaw and David Garlan (Shaw and Garlan 1996). Their definition is:
"Software architecture encompasses the set of significant decisions about the organization of a software system including the selection of the structural elements and their interfaces by which the system is composed; behavior as specified in collaboration among those elements; composition of these structural and behavioral elements into larger subsystems; and an architectural style that guides this organization. Software architecture also involves functionality, usability, resilience, performance, reuse, comprehensibility, economic and technology constraints, tradeoffs and aesthetic concerns."
In Patterns of Enterprise Application Architecture, Martin Fowler outlines some common recurring themes when explaining architecture. He identifies these themes as:
"The highest-level breakdown of a system into its parts; the decisions that are Hard to change; there are multiple architectures in a system; what is architecturally Significant can change over a system's lifetime; and, in the end, architecture boils Down to whatever the important stuff is."
Software application architecture is the process of defining and coming up with a solution that is well structured and meets all of the technical and operational requirements. The architecture should be able to take into account and improve upon the common quality attributes such as performance, security, and manageability.
The main focus of the Software architecture is how the major elements and components within an application are used by, or interact with, other major elements and components within the application. The selection of data structures and algorithms or the implementation details of individual components are design concerns, they are not an architectural concerns but sometimes Design and Architecture concerns overlap.
Before starting the architecting of any software, there are some basic questions that we should strive to get answers for. They are as follows:
How the users of the system will be interacting with the system?
How will the application be deployed into production and managed?
What are the various non-functional requirements for the application, such as security, performance, concurrency, internationalization, and configuration?
How can the application be designed to be flexible and maintainable over time?
What are the architectural trends that might impact your application now or after it has been deployed?
Goals of Software Architecture
Building the bridge between business requirements and technical requirements is the main goal of any software architecture. The goal of architecture is to identify the requirements that affect the basic structure of the application. Good architecture reduces the business risks associated with building a technical solution while a good design is flexible enough to be able to handle the changes that will occur over time in hardware and software technology, as well as in user scenarios and requirements. An architect must consider the overall effect of design decisions, the inherent tradeoffs between quality attributes (such as performance and security), and the tradeoffs required to address user, system, and business requirements.
Principles of Software Architecture
The basic assumption of any architecture should be the belief that the design will evolve over time and that one cannot know everything one need to know up front. The design will generally need to evolve during the implementation stages of the application as one learn more, and as one tests the design against real world requirements.
Keeping the above statement in mind, let's try to list down some of the Architectural principles:
The system should be built to change instead of building to last.
Model the architecture to analyze and reduce risk.
Use models and visualizations as a communication and collaboration tool.
The key engineering decisions should be identified and acted upon upfront.
Architects should consider using an incremental and iterative approach to refining their architecture. Start with baseline architecture to get the big picture right, and then evolve candidate architectures as one iteratively test and improve one's architecture. Do not try to get it all right the first time-design just as much as you can in order to start testing the design against requirements and assumptions. Iteratively add details to the design over multiple passes to make sure that you get the big decisions right first, and then focus on the details. A common pitfall is to dive into the details too quickly and get the big decisions wrong by making incorrect assumptions, or by failing to evaluate your architecture effectively.
When testing your architecture, consider the following questions:
What were the main assumptions that were made while architecting the system?
What are the requirements both explicit and implicit this architecture is satisfying?
What are the key risks with this architectural approach?
What countermeasures are in place to mitigate key risks?
In what ways is this architecture an improvement over the baseline or the last candidate architecture?
Design Principles
When getting started with Software design, one should keep in mind the proven principles and the principles that adheres to minimizes costs and maintenance requirements, and promotes usability and extensibility. The key principles of any Software Design are:
Separation of concerns: The key factor to be kept in mind is minimization of interaction points between independent feature sets to achieve high cohesion and low coupling.
Single Responsibility principle: Each component or module should be independent in itself and responsible for only a specific feature or functionality.
Principle of Least Knowledge: A component or object should not know about internal details of other components or objects.
Don't repeat yourself (DRY): The intent or implementation of any feature or functionality should be done at only one place. It should never be repeated in some other component or module
Minimize upfront design: This principle is also sometimes known as YAGNI ("You ain't gonna need it"). Design only what is necessary. Especially for agile development, one can avoid big design upfront (BDUF). If the application requirements are unclear, or if there is a possibility of the design evolving over time, one should avoid making a large design effort prematurely.
Design Practices
Keep design patterns consistent within each layer.
Do not duplicate functionality within an application.
Prefer composition to inheritance. If possible, use composition over inheritance when reusing functionality because inheritance increases the dependency between parent and child classes, thereby limiting the reuse of child classes. This also reduces the inheritance hierarchies, which can become very difficult to deal with.
Establish a coding style and naming convention for development.
Maintain system quality using automated QA techniques during development. Use unit testing and other automated Quality Analysis techniques, such as dependency analysis and static code analysis, during development
Not only development, also consider the operation of your application. Determine what metrics and operational data are required by the IT infrastructure to ensure the efficient deployment and operation of your application.
Application Layers: While architecting and designing the system, one needs to carefully consider the various layers into which the application will be divided. There are some key considerations that need to be kept in mind while doing that:
Separate the areas of concern. Break your application into distinct features that overlap in functionality as little as possible. The main benefit of this approach is that a feature or functionality can be optimized independently of other features or functionality
Be explicit about how layers communicate with each other.
Abstraction should be used to implement loose coupling between layers.
Do not mix different types of components in the same logical layer. For example, the UI layer should not contain business processing components, but instead should contain components used to handle user input and process user requests.
Keep the data format consistent within a layer or component.
Components, Modules, and Functions: Key Considerations
In the previous sections we talked about key considerations that need to be kept in mind while architecting or designing an application. We also touched based on what needs to be kept in mind when we are dividing our application into various layers. In this section let's take a look at some key considerations for designing component, modules and Functions.
A component or an object should not rely on internal details of other components or objects.
Never overload the functionality of a component. For example, a UI processing component should not contain data access code or attempt to provide additional functionality.
Explicitly state how the components will communicate with each other. This requires an understanding of the deployment scenarios your application must support. You must determine if all components will run within the same process, or if communication across physical or process boundaries must be supported-perhaps by implementing message-based interfaces.
Keep crosscutting code (such as logging and performance) abstracted from the application business logic as far as possible.
Present a clear contract for components. Components, modules, and functions should define a contract or interface specification that describes their usage and behavior clearly.

affiliate_link

Benefit of Using WordPress to Build Your Website

Benefit of Using WordPress to Build Your Website

WordPress is a content management system and blogging tool whose work is based on PHP and MySQL. It is an open source platform and runs on a web hosting service. In fact, now a day's WordPress is the one of the most well known blogging sites used on the internet. This tool can be used for developing user friendly and interactive websites. Hence, numerous bloggers across the world use this tool to develop their blogs. Most of the business purpose and self-employed create his own websites in WordPress because it's free and take very short time to build. So if you are looking forward to build a new website through WordPress then you should look for the best Website Design and Development Company to serve your purpose.
Let's discuss about the advantages of building a website through WordPress:
- WordPress is very easy to use and has an intuitive interface. You can add new pages, blog posts, images etc by yourself. All the pages, blogs, categories and customized with the help of various plug-ins without any difficulty or trouble.
- The WordPress gives you a nice store that will track inventory, transfer payments and get your shipping sorted out.
- Predefined themes are available free of cost and the themes can be easily installed according to the needs.
- Customization is possible through WordPress.
- You can manage your websites from any computer by one admin panel.
- Search Engine Optimization love WordPress sites because the code behind the site is very simple and clean to make it easy for search engine.
- After you complete your WordPress site you don't have to take help from your webmaster because you can easily make those updates yourselves.
- As an administrator of a WordPress site, you can set-up multiple user for the website and assign access levels and capabilities to each other.
There are also many of the advantages in WordPress websites; If you use it then you can feel it.
What will you have to do in order to build a WordPress website?
You have to find the best website design and development company since you want your website to look good and better from your competitors.
Check out their previous works. You must avail the service of experienced web designers and web developers who are familiar working with WordPress.
When you are hiring an expert WordPress developer make sure to avail top services for your WordPress website with a unique content management system and interactive Theme Development. The best website design and development company have the experienced and professional WordPress developers who can build your website with all the latest trends and techniques prevailing in the market in order to give you an added advantage over your competitors.

HTML5 and Mobile Apps Development

HTML5 and Mobile Apps Development

Since decades, Hyper Text Markup Language or generally regarded as HTML has dependably been a standout amongst the most favored, demonstrated and premier advancement stage for web planning, web improvement and in addition for web provision improvement. Software and web development companies around the world always depend on HTML for development and designing of scalable websites and web applications.
Html5 sincerely has a ton of potential for advancement to be made in the web; however one needs to understand the patterns of the markup language before structuring or presenting content with it. At first, it is extremely essential to grasp the idea of Html5 so as to effectively utilize it for portable provision improvement. Html5 includes details of essential modifying dialects like Javascript, HTML, and CSS; providing designers will all of the properties required creating next generation websites & mobile applications. With HTML5 come a richer style, improved markup, enhanced capabilities, and latest JavaScript APIs, assisting in the designing of new apps. Therefore, HTML5 can be referred to as a combination of the features of HTML, JavaScript, & CSS.
However, when we look on another hand mobile technology giant such as for example Apple, Google and Microsoft are usually pushing forward to supply better mobile operating systems. Apple latest iOS 5, Android Ice Cream Sandwich and Microsoft Windows Phone 7.5 (Mango) OS might be the right examples. Present day versatile application engineers have felt the developing request of Html5 as an improvement apparatus. Html5 for sure serves to handle wealthier versatile requisitions that can run over all major OS stages.
Html5 is such an innovation which rapidly comprehended these necessities of the business sector and began giving a widespread application result that can work impeccably on all portable stages with the assistance of Html5 versatile development. It has led to the newest revolution with the necessity of cross platform mobile development. HTML5 is not merely utilized in web and mobile website development, but in addition it powered web application. The front-end of each hybrid application is manufactured using native programming languages like java, Objective C, etc. But the back-end part is purely powered by HTML5 and other web development technologies like JavaScript and CSS.
The amounts of clients utilizing these working frameworks oriented smart phones are increasing day-in and day-out. Again each distinct has his own particular decision of portable OS and stage. This at last influences the stakeholder who is choosing an answer by means of portable application advancement as outlining an application devoted to one stage won't permit him to addition major market share. Choosing an app solution that works on all cellular devices is vital, and at once it proves to be expensive and time consuming.
Now, let us know something about Phone Gap. Phone Gap can be a platform centered on HTML5 which allows mobile application developers create native applications with the help of CSS3, HTML5 and JavaScript. The best thing about Phone Gap is that a developer can put it to use as well as other Frameworks in order to create features which can be constructed with Phone Gap alone. With the passage of time, Phone Gap and Senca Touch have grown to be the most demanded frameworks.
jQuery Mobile can be a net framework. It is touch-advanced and utilized for advanced mobile phones and Tablets. Additionally, it is a single graphical user interface that remains exactly the same on all platforms. Due to its lightweight code, mobile application developers prefer it to other frameworks. Various kinds of themes are available which can be customized easily based on the needs of the designer. jQuery enables you to write a single code so as to produce a customizable website application. This makes things simpler for you to do.

affiliate_link