Nat  Grady

Nat Grady

1622262713

Evolution of Software Architecture

Evolution may not only happened in IT section. Evolution happen in every other fields even human has a evolution. So in this article I will explain about the evolution of software architecture and I will take you from standalone systems to microservices.

One Tier Architecture

**One Tier application is also known as a Standalone application which is the simplest architecture. **It is equivalent to running the application on a personal computer. So all the required components for an application to run are on a single application or server. So Presentation layer, Business logic (application)layer, and data layer are all located on a single machine or a software package. Some of the examples for one tier architecture is MP3 player and MS office. So in one-tier architecture data can be stored in the local system or a shared drive. Speaking about some of the advantages of this type of systems are,

  1. It’s simple and easy to implement.
  2. Very efficient.
  3. No compatibility and no context switching issues

When we think about some of the disadvantages,

  1. Since it only in one machine it does not support remote/ distributed access for data resources.

Two-Tier Architecture

After one-tier architecture, we moved to two-tier architecture. The two-tier** architecture is also known as client-server application**. So this architecture is divided into two parts. Those are,

1. Client Application (Client Tier)

2. Database (Data Tier)

The client system handles both Presentation and Business layer(Application layer) and the Server system handles the Database layer. So basically what happens is the client system sends the request to the server system and the Server system processes the request and sends back the data to the client system. So the communication takes place between the client and the server. When we consider the advantages,

  1. Easy to maintain and the modification is a bit easy.
  2. Faster communication.

Some of the disadvantages are,

  1. Application performance will be decreased when increasing the number of users.

#software-architecture #2-tier-architecture #microservices #soa #3-tier-architecture

What is GEEK

Buddha Community

Evolution of Software Architecture
Fannie  Zemlak

Fannie Zemlak

1595927640

Road to Simplicity: Hexagonal Architecture [Part One]

Software writing taught me that: a well written software is a simple software.

So I started to think how to achieve simplicity in a methodological

way. This is the first story of a series about this methodology.

Naturally it’s a snapshot because it’s in constant evolution.

Simplicity

A definition of simplicity is:

The quality or condition of being easy to understand or do.

Oxford dictionary (https://www.lexico.com/en/definition/simplicity)

So, a simple software is a software that is easy to understand.

After all software are written by humans for humans. This implies

that they should be understandable. Simplicity guarantees that its

understandability isn’t an intellectual pain.

A software solves a problem. So to build the former you should understand the latter.

But to build a simple software you should understand - clearly - a problem.

First step: architecture

On the Martin Fowler blog there is a deep definition of architecture and its explanation:

“Architecture is about the important stuff. Whatever that is.”

On first blush, that sounds trite, but I find it carries a lot of richness.

It means that the heart of thinking architecturally about software is to decide what is important, (i.e. what is architectural), and then expend energy on keeping those architectural elements in good condition.

Ultimately the important stuffs are about the solved problem. In other words about the software domain.

So we need an architecture that allows us to express - clearly - the software domain.

I think that the hexagonal architecture (a.k.a. ports and adapter architecture) is an ideal candidate.

It’s based on layered architecture, so the outer layer depends on the inner layer. Each layer is represented as a hexagon.

Here a UML-like diagram to express the below concepts:

In this architecture the innermost hexagon is dedicated to the

software domain. Here we define domain objects and we express clearly:

  • what the domain does as input port or use case (I prefer the latter because expressiveness).
  • what the domain need, to fulfill use cases, as output port.

Conceptually on the sides of the domain layer there are use case and output port interfaces.

The communication between the outer layers and the domain layer happens through these interfaces.

The outer layer provides output port implementations and they use the use case interfaces.

The implementations and use case clients are are called adapter. Because they adapt our interface to a specific technology.

This relation is an instance of the dependency inversion principle. Simply put: high level concept, the domain, doesn’t rely on a specific

technology. Instead low level concept depends upon high level concept.

In other words our code is technology agnostic.

As you can see the concepts expressed in the outer layers are just details.

The real important stuff, the domain, is isolated and expressed clearly.

Code

A little project accompanies this series to show this methodology. It’s written in Java with the reactive paradigm from the beginning. For this reason the ReactiveX library is also used in the domain layer.

The software analyzes the capabilities (e.g. the java version, the

network speed and so on) of the machine and it exposes them through REST API.

It’s inspired by a real world software that I wrote because of work.

The first step is to define the innermost hexagon.

We can already identify:

  • the main use case, expressed as GetCapabilitiesUseCase
  • the object that describe the machine capabilities, expressed as Capabilities

The use case is an interface:

(if you never used ReactiveX: a Single means that the method will return asynchronously an object or an error)

public interface GetCapabilitiesUseCase {
  Single<Capabilities> getCapabilities();
}

The Capabilities objects are immutable (precisely they’re value objects). And there is an associated builder (I’m using lombok annotations to generate the code):

@RequiredArgsConstructor
@Value
@Builder
public class Capabilities {
  private final String javaVersion;
  private final Long networkSpeed;
}

#architecture #software-architecture #programming #java #hexagonal-architecture #reactive-programming #software-development #software-engineering

Custom Software vs Off-the-shelf Software: How to select a better one for your business?

Custom Software or Off-the-shelf software, the question in mind for many business personnel. Read this blog to get help to make the right decision that will benefit your business.
For a business that wants to upgrade and modernize itself with the help of software, a common dilemma it is whether to go for custom-made software or opt for off-the-shelf software. You can find many top software development companies worldwide, but before that all, you should first decide the type of software –an off-the-shelf software or a custom one.
This blog aims to overcome the dilemma and accord some clarity to a business looking to automate its business processes.

#custom software vs off-the-shelf software #custom software development companies #top software development companies #off-the-shelf software development #customized software solution #custom software development

SangKil Park

1591846392

Science and Engineering in Software Architecture

We are passing through tough times, “The moment everything changed” with COVID-19, quarantine, people trying adapt their day to day, companies not prepared to work remotely… On top of that, one thing that I have seen is a lack of science in different aspects. Lots of assumptions, lack of data and a complete chaos.

In engineering, one thing that we don’t want is chaos — WHAT?! But what about chaos mindset, chaos engineering? — don’t get me wrong, as engineers , we accept chaos and live with it, but build stable and resilient systems on top of it.

According to wikipedia, “Scientists study things by looking at them very carefully, by measuring them, and by doing experiments and tests. Scientists try to explain why things act the way they do, and predict what will happen” and also “Science uses mathematics and logic, which are sometimes called ‘formal sciences’.”, “ Science produces accurate facts, scientific laws and theories”. And as you well know, against facts there are no arguments.
Science is about exploring, experimentation, discovery and, of course, data. Please, data. Let’s base our propositions, our argues and discussions on concrete things…

#software-architecture #software-methodology #computer-science #software-improvement #software-engineering

Christa  Stehr

Christa Stehr

1594456938

Offshore Software Development - Best Practices

With the rise of globalization and the worldwide lockdown due to the pandemic, most of the work has been done by remote working processes and professionals from their homes. This lockdown has proved the efficiency of remote development and enhanced the trust in offshore software development industry.

To make the most out of the benefits of offshore software development, you should understand the crucial factors that affect offshore development. This is why you should read this guide for the best practices when hiring an offshore software development company. Despite the size and the industry of the business, offshore software development is not beneficial for every entrepreneur in many aspects to make the optimum use of talents in technology across the globe.

Here are some of the top reasons why offshore development is beneficial for your business.

  • Offshore development teams can work on flexible timing to provide you with the best possible software development practices.
  • Get access to the talents across the world from your home to develop the top of the line software with the help of offshore development companies.
  • Assured high quality and next-generation technology expertise with duly NDA signed with respect to the priorities of the business.
  • With flexible recruitment models, you can hire the freelance developers, remote development team, or an entire offshore development company with respect to the size of your business.
  • Build high-end software applications from one corner of the world by hiring software developers across the world.
  • Get immediate access to the best resources without hiring them on a permanent basis.

To avail of all these benefits, you should have clear goals, a list of requirements, and features that are mandatory for your software product.

Here are a few tips to help you find the best offshore software development company. Build a top-notch software application by following the listed best practices.

#web development #how to start offshore software development company #offshore meaning #offshore software development best practices #offshore software development company #offshore software development company in india #offshore software development cost #offshore software development statistics #outsource software development

Nat  Grady

Nat Grady

1622262713

Evolution of Software Architecture

Evolution may not only happened in IT section. Evolution happen in every other fields even human has a evolution. So in this article I will explain about the evolution of software architecture and I will take you from standalone systems to microservices.

One Tier Architecture

**One Tier application is also known as a Standalone application which is the simplest architecture. **It is equivalent to running the application on a personal computer. So all the required components for an application to run are on a single application or server. So Presentation layer, Business logic (application)layer, and data layer are all located on a single machine or a software package. Some of the examples for one tier architecture is MP3 player and MS office. So in one-tier architecture data can be stored in the local system or a shared drive. Speaking about some of the advantages of this type of systems are,

  1. It’s simple and easy to implement.
  2. Very efficient.
  3. No compatibility and no context switching issues

When we think about some of the disadvantages,

  1. Since it only in one machine it does not support remote/ distributed access for data resources.

Two-Tier Architecture

After one-tier architecture, we moved to two-tier architecture. The two-tier** architecture is also known as client-server application**. So this architecture is divided into two parts. Those are,

1. Client Application (Client Tier)

2. Database (Data Tier)

The client system handles both Presentation and Business layer(Application layer) and the Server system handles the Database layer. So basically what happens is the client system sends the request to the server system and the Server system processes the request and sends back the data to the client system. So the communication takes place between the client and the server. When we consider the advantages,

  1. Easy to maintain and the modification is a bit easy.
  2. Faster communication.

Some of the disadvantages are,

  1. Application performance will be decreased when increasing the number of users.

#software-architecture #2-tier-architecture #microservices #soa #3-tier-architecture