- if ACTION = DELETE, default it to soft-deletion keeping it in active storage.
- Deciding to push data to cold storage for archival if primary storage has grown considerably,
- Elimination process of data ageing based on years of inactivity.
Developing an architecture is all about viewing a blackbox which is your product from different Perspectives be it Informational, Context, Operational, Functional, Development, Deployment and so on. Unfortunately, one has to open doors of creativity beyond the scope of textbook architecture and solutions. Design thinking is an essential trait here.
Based on my experience on architecting and developing different products or training around a 100 budding enterprise architects, an architect would enter a product that could be at various stages
1. A new Product
2. Enhancements to a Product that alter the flow and impact on the rest of the system
3. Migration cases for a product, whether to upgrade it to a newer tech-stack, a deployment environment, devops automation, data migration
For each type of system, a specific architectural model (eg: 4+1 architectural model is normally relevant in most products) and collection of allied perspectives (views) work out.
Development as a view for solutioning comes a little later, if the information, its flow and contexts with scope, boundaries, external dependencies and a high-level business usecases are drawn out.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
A lot of modelling and solutioning happens even before we talk design patterns actually. Design Patterns with UML as a modelling technique can come at Low Level Design using tools like EA or Visio. These tools translate UML at the LLD level offering certain amount of code generation and templating as per design.
High Level Design uses architectural modelling techniques solutioning information, flow and usecases using Architectural views and viewpoints.
Hence, the Development as a perspective comes at high level design and makes sense only when as an architect solutions the informational view its flow and contexts, scopes.
This is my take on an example solutioning with the informational view for a system
Assuming we have the contexts solutioned in terms of
the product could be solutioned using Top-to-Down through the Development perspective
=======================================================================
Is all about the flow of the product's though objective-based tiers. We could start with taking the outputs of the previous architecture views considering the product as the blackbox, broken into tiers identifying
Here we do not confuse this flow with how the product would be placed in the production environment.
Hence keywords like flow, tier-ed architectures, frameworks, process, paradigms keeping the user (actor) using your product become important here.
Keywords like servers, IP addresses, topology, balancers, payloads, horizontal / vertical scaling should not be addressed here. These keywords become important for deployment architecture and its solutioning.
I mention these explicitly as I do get asked questions, so is it N-Tier or Microservices architecture? The comparison in the question is itself flawed.
One should understand that N-Tier is a development architecture, which is different from a deployment architecture. Microservices is taken into consideration where independent loosely coupled subsystems are managed and deployed separately. But this aspect does seem to affect the tiers of development to a certain extent though.
SO, how do you solution it without getting confused between development flows which could vary from deployment flows?
We can use a simple principle where multiple entities need a discovery engine. In this case, If a layer becomes polyglotic (multiple projects in multiple frameworks or languages), we need a common translator / management layer
CASE: Presentation Tier shown in this diagram becomes polyglottic.
CASE: Service layer becomes polyglotic,
SOLUTION: introduce a service discovery layer (Application Gateway). This is Service Discovery Pattern at a high level.
Once these principles are clear, we can begin solutioning the product through the Development perspective
Input for Solutioning Development View: Context View Diagrams
- Scope + Responsibility
- Tech-stack(s)
- Business usecases
- External Dependencies
Expected Deliverable: Dev Architecture Diagram including everything from previous views
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The end output should look something similar to the diagram below.
The end output should look similar to the diagram below
At this stage, it makes sense to identify cross-cutting concerns that cut accross the tiers of the product architecture at Stage 2.
Eg: Cross-cutting concerns like Non-functional requirements (NFRs), SDLC / TDLC / DevOps / Logging solutoins / Monitoring solutions etc
The output at Stage 3 should look similar to the diagram below
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Finally,
Every view should be analyzed for Trade-offs and Design Smells to zero-in on any anti-patterns and design debts that could be possible.
ANS 3.1: Modifying data added in the schema, without change in existing schema, using json / xml data as row data. Suggested "extension" through extension code contracts not refactoring in existing processing algorithm.
Question | AnswerQ1 | options: [{option:'Op1',IsAnswer:'No',UIMarkup: '</>',settings: {setting1:'value', setting2:'value2',...}}]
ANS 3.2: Modifying data added in the schema, without change in existing schema, using links to json/xml templates / data. This solution works well for content management systems.
QuestionBank | Answer
QB1 | link://jsondoc
~~~ jsondoc on Server
[ {question: 'Q1',options: [{option:'Op1',IsAnswer:'No',UIMarkup: '</>',settings: {setting1:'value', setting2:'value2',...}}],{question: 'Q2',
options: [{option:'Op1',
IsAnswer:'No',UIMarkup: '</>',settings: {setting1:'value', setting2:'value2',...}}],...]
Here, we shall take an example of integrating a large framework with smaller frameworks.
This case can be applicable for a lot of enterprise applications today.
Eg: The .Net Framework, CRM Applications like MIS, Zoho CRM or even OLA, Netflix
Here, we will take the usecase of 2 systems