What is Software Architecture?

To understand software architecture, or simply architecture, let us discuss a requirement of real life. Let us assume there is a requirement of a one-floor building where in the future we can add some more floors, and also we will be able to change the room design of new or existing floors with easy-to-make partitions at any time. So these are the common requirements of the building, and also it must not be affected by earthquakes, meaning the building should be ready to face any situation easily. So these are nothing but attributes and behaviors of the building, and we can only achieve all this through with proper design. The design of the foundation is the most important part of any building design, and also as an end user or client, we always consider concepts such as Time, Budget, Flexibility, Maintainability, Reliability, Robustness etc. Whenever we need something in real life we generally ask the vendor questions like: How was this built? What would be the cost of maintaining it in the future? How long will it last? etc. And the vendor as a non-computer person will say, we have made it this way or that way, and this particular item is long-lasting and easy- to-maintain in the future. They will say so many thing to satisfy our questions. It means in a direct way, he was trying to explain about how this item was constructed or designed so that it meets the user requirements and also is easy to maintain in the future.

The underlying idea from the above point is that if anything is designed properly or structurally then this will produce a good product which will meet all the above criteria. So this is nothing but architecting the items in a well-planned way to meet the fundamental theory of the previously-mentioned words.

So in short, architecture is nothing but the process of defining a structured solution of anything which meets technical and non-technical operations of any business. In brief, it is just a design process on paper or in real implementation.

Goals of Architecture

There are various goals of architecture,
There are various objectives and goals which we can achieve from good architecture.

Architecting Principals


There are some key design principals which help to achieve a good architectural product and they are,
Design Practices

If we think at a high level of architecting the solution then we may come up with some ideas and they would be,
When to Create Architecture

Historically, architectures are created in the design phase or early in the development of a system. If you’re using a waterfall development process, for example, creating the architecture is one of the very first things you do. You define the problem and then solve it with an architecture. If, instead, you’re using an iterative software development process, such as Unified Process or agile, the architecture is typically evolved and elaborated in the early iterations in parallel with some low-level design and coding. As iterations of the architectural development become stable and complete, the other steps, such as design and coding, can begin. Each iteration may include more refinement to the architecture in conjunction with further design and coding.
Pattern
A Pattern is an idea that has been useful in one practical context and may be in others. Pattern can be classified as an Architectural and Design Pattern.
  1. Architectural Patterns

    Architectural Patterns define the physical or logical structure of the solution at the highest level. Architectural patterns require all the parts of the system that are touched by the pattern to participate in its design. It can be classified into various categories:

    • Client/Server
      Distributes the system into two applications, where the client makes requests to the server. In many cases, the server is a database or any other application that serves as Server.

    • Component-Based
      Decomposes application design or logic into reusable functional or logical components that expose well-defined properties or methods to interact with the components such as Grid, Button, Data Adapter etc.

    • Domain Driven Design
      Domain Driven Design is an OOPS approach to designing software applications by modeling a business domain and defining Business Objects based on Entities.

    • Layered Architecture
      Partitions the concerns of the application into stacked groups (layers) and are deployed on the same computer.

    • Message Bus
      An architecture style that prescribes the use of a software system that can receive and send messages using one or more communication channels, so that applications can interact without needing to know specific details about each other.

    • N-Tier / 3-Tier
      Distributes the functionality into separate parts in much the same way as the layered style, but with each part being a tier located on a physically separate computer.

    • Object-Oriented
      Object Oriented design is the process of creating self-sufficient objects having a set of properties and methods which deals with the specific logic or functionality of an application and can also contain the set of data as part of functionality.

    • Service-Oriented Architecture (SOA)
      SOA is nothing but an Application that provides services to other applications independent of any platform or technology that exposes and consumes functionality as a service using contracts and messages.

  2. Design Patterns

    Design Patterns are nothing but a process or methodology to apply or implement good architecture in a solution. In other words, Design Pattern is a subset of Architecture where we follow some programming patterns to prevent known development issues which in turn reduces the maintainability time.

    “Pattern is a recurring design element." Design Patterns are the solution of a known problem occuring during software development.
Design
What Design Pattern is Not
  • Patterns are not any framework
  • It is not a universal problem solver
  • It is not an algorithm
  • Patterns are not exclusive to OOPS
Creating Your Own Design Pattern

Creating your own pattern is not hard but you need an idea to solve some specific problem that becomes the best solution of the given problem. Then get it reviewed, document it, and share it with your colleague so they can learn from what you have done.

Rule of Three

Any solution can be a design pattern that confirms the Rule of Three, which means something must be used at least three times to solve the same problem successfully before it can be called a design pattern.

Design

Types of Design Patterns

There are three categories of design patterns which can be used as per the requirement and they are,

I hope this article will help you to understand Architecture and Design Pattern properly. In the next article we will see the real implementation of each design pattern relating to a real world problem.