Recently while I was attending an interview I came across a question Static vs Singleton. Though I know the differences I couldn’t answer it properly, as I was not refreshed my programming knowledge before the interview.
I would like to quote a reference to Jalpesh’s blog article (www.dotnetjalps.com) explaining the difference:
Difference between Static and Singleton classes:
- A singleton classes allowed to create a only single instance or particular class. That instance can be treated as normal object. You can pass that object to a method as parameter or you can call the class method with that Singleton object. While static class can have only static methods and you can not pass static class as parameter.
- We can implement the interfaces with the Singleton class while we can not implement the interfaces with static classes.
- We can clone the object of Singleton classes we can not clone the object of static classes.
- Singleton objects stored on heap while static class stored in stack.
- A Singleton class can extend the classes(support inheritance) while static class can not inherit classes.
- Singleton class can initialize lazy way while static class initialize when it loaded first
- Static classes are sealed class while Single ton classes are not sealed.
Credits to Jalpesh Vadgama – “Computer Geek, Developer, Mentor, Life long learner, 10+ Years of Experience in Microsoft.NET Technologies, Awarded Microsoft Mvp(C#) for year 2010,11 and 2012.”
SOA starts with a simple idea – the concept of service. Services are unassociated, loosely coupled units of functionality that are self-contained. Each service implements at least one action, such as submitting an online application for an account, retrieving an online bank statement or modifying an online booking or airline ticket order.
There are multiple definitions for SOA:
The OASIS group and the Open Group have both created formal definitions.
OASIS’s Definition of Service Oriented Architecture
A paradigm for organizing and utilizing distributed capabilities that may be under the control of different ownership domains. It provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations.
The Open Group’s Definition of Service Oriented Architecture
Service-Oriented Architecture (SOA) is an architectural style that supports service-orientation. Service-orientation is a way of thinking in terms of services and service-based development and the outcomes of services. A service is a logical representation of a repeatable business activity that has a specified outcome (e.g., check customer credit, provide weather data, consolidate drilling reports)
The purpose of SOA is to allow users to combine together fairly large chunks of functionality to form ad hoc applications built almost entirely from existing software services. The larger the chunks, the fewer the interfaces required to implement any given set of functionality; however, very large chunks of functionality may not prove sufficiently granular for easy reuse. Each interface brings with it some amount of processing overhead, so there is a performance consideration in choosing the granularity of services.
SOA as an architecture relies on service-orientation as its fundamental design principle. If a service presents a simple interface that abstracts away its underlying complexity, then users can access independent services without knowledge of the service’s platform implementation.
Horizontal Layers of SOA
SOA-based solutions endeavour to enable business objectives while building an enterprise-quality system. SOA architecture is viewed as five horizontal layers:
- Consumer Interface Layer – These are GUI for end users or apps accessing apps/service interfaces.
- Business Process Layer – These are choreographed services representing business use-cases in terms of applications.
- Services – Services are consolidated together for whole-enterprise in-service inventory.
- Service Components – The components used to build the services, such as functional and technical libraries, technological interfaces etc.
- Operational Systems – This layer contains the data models, enterprise data repository, technological platforms etc.
Cross Cutting – Vertical Layers of SOA
There are four cross-cutting vertical layers, each of which are applied to and supported by each of the following horizontal layers:
- Integration Layer – starts with platform integration (protocols support), data integration, service integration, application integration, leading to enterprise application integration supporting B2B and B2C.
- Quality of Service – Security, availability, performance etc. constitute the quality of service parameters which are configured based on required SLAs, OLAs.
- Informational – provide business information.
- Governance – IT strategy is governed to each horizontal layer to achieve required operating and capability model.
The use of services provides major benefits:
- In contrast to the use of large applications, which tend to be “information silos” that cannot readily exchange information with each other, the use of finer-grained software services gives freer information flow within and between enterprises. Integrating major applications is often expensive. SOA can save integration costs.
- Organizing internal software as services makes it easier to expose its functionality externally. This leads to increased visibility that can have business value as, for example, when a logistics company makes the tracking of shipments visible to its customers, increasing customer satisfaction and reducing the costly overhead of status enquiries.
- Business processes are often dependent on their supporting software. It can be hard to change large, monolithic programs. This can make it difficult to change the business processes to meet new requirements (arising, for example, from changes in legislation) or to take advantage of new business opportunities. A service-based software architecture is easier to change – it has greater organizational flexibility, enabling it to avoid penalties and reap commercial advantage. (This is one of the ways in which SOA can make an enterprise more “agile”.)
Now to coming to the question “Why SOA?”, I believe mostly it is answered.
In summary SOA helps you with:
- Reuse and composition. This is particularly powerful for creating new business processes quickly and reliably.
- Recomposition. The ability to alter existing business processes or other applications based on service aggregation.
- The ability to incrementally change the system. Switching service providers, extending services, modifying service providers and consumers. All of these can be done safely, due to well-controlled coupling.
- The ability to incrementally build the system. This is especially true of SOA-based integration.