-
Notifications
You must be signed in to change notification settings - Fork 3
Technology Choices
James Butler edited this page Jul 28, 2022
·
28 revisions
- React Native:
- Description:
- React Native is mobile development JavaScript framework designed with efficiency as a major concern. It is based on the React framework. Redux is a state management library that is often paired with React Native.
- Advantages:
- React Native is designed to use native components from IOS and Android, making it more responsive and usable.
- React Native allows for modular code design, allowing it to work well as the view component of the MVC design pattern and be scalable.
- Reliability is integrated within React Native's design, allowing for better control over how the system performs.
- Redux integrates well with API requests and allows for asynchronous programming to be used effectively.
- Disadvantages:
- Due to React Native being a newer framework, based on JavaScript and is open source, security can be difficult to implement.
- React Native does not handle large or complex computations well, due to it being based on JavaScript. This may cause performance bottlenecks.
- How it fits with the system:
- This framework allows for a responsive and usable UI.
- Development is quick compared to other frameworks, meaning it integrates well with the Agile approach that we are following.
- It covers the usability, scalability and reliability quality requirements of our system.
- This framework can fit well as the View component in the model View Controller design pattern.
- Redux allows for simple, reliable data handling in the client such that the Redux slices help form the remaining parts of the MVC architectural pattern on the client's side.
- The disadvantages of this framework are not relevant to this system as security is not a quality requirement and most complex computation will occur on the server.
- Description:
- Vue Native:
- Description:
- Vue is a progressive JavaScript framework used for the development of user interfaces. Vue Native is a framework based on Vue that allows for native application development for Android and IOS.
- Advantages:
- Vue Native is reactive, allowing for more usability.
- Vue Native is designed to use the Model View Controller architectural pattern, which allows it to integrate well with this project's UI.
- Disadvantages:
- Vue Native is a newer framework and so lacks the support and resources of other more established frameworks.
- It is more difficult to customize components using Vue Native compared to other frameworks.
- How it fits with the system:
- This framework is usable for the development of the UI using MVC
- However, the lack of support and lack of resources make development with Vue Native slow.
- Description:
- Angular:
- Description:
- Angular is an open source front-end framework for JavaScript. It is one of the most widely used frameworks.
- Advantages:
- Angular was designed using Model View Controller, which is also being used in our UI.
- Angular allows for dynamic content generation which makes the UI more usable and enhances scalability.
- Disadvantages:
- Angular has performance issues when applications are large and complex, causing lag during transitions.
- How it fits with the system:
- This framework works well with the Model View Controller design pattern that is being used in the frontend
- However, the performance issues conflict with the usability quality requirement of our system.
- Description:
- GraphQL:
- Description:
- GraphQL is a query language. It provides a query in the form of a string that is sent to a server. The server interprets the query and then returns the result in the form of JSON format to the client.
- Advantages:
- GraphQL is faster, it is way faster than other communication APIs because it facilitates you to cut down your request query by choosing only the specific fields you want to query.
- When we request GraphQL queries to the server, the server returns the response in a simple, secure, and predictable shape. So, it facilitates you to write a specific query according to your requirement.
- Arbitrary functions back GraphQL fields on the servers. They do not dictate or provide any backing storage. Instead, GraphQL takes advantage of your existing code.
- The latest version is not required, in GraphQL, the result set or returned data is very specific according to the client's query, so; it is very simple and easy for the server to generalize it. When we add new product features or additional fields to the server, they don't affect the existing clients.
- Disadvantages:
- GraphQL Rate Limiting - In REST API, you can simply specify that we allow only this amount of requests in one day, but in GraphQL, it is difficult to specify this type of statement.
- GraphQL Caching - In GraphQL, caching is very complex because each query can be different, even though it operates on the same entity. But most of the libraries built on top of GraphQL offer an efficient caching mechanism.
- GraphQL Query Complexity - There must be a mechanism like maximum query depths, query complexity weighting, avoiding recursion, or persistent queries to stop inefficient requests from the client-side.
- How it fits with the system:
- Description:
- REST:
- Description:
- REST stands for Representational State Transfer. REST is designed for especially working with components such as files, objects, and media components on a particular hardware device. Web service is defined on principles of REST and can be defined as a RESTful web service. RESTful web service can use normal POST, DELETE, PUT, and HTTP verbs of GET for working with required components.
- Advantages:
- Due to scalability, the protocol stands out when compared to other APIs. The reason is due to the server and client separation. This links back to our functional requirement that the service layer needs to be loosely couped and works with the Service-Oriented in our architecture.
- Because of its flexibility and portability. With REST essential data is covered in one request not ending at this but also easier to shift the data from one server to another one. It gives access to modifications to the database at any time.
- The separation of server and client made it easy for the protocol to work on various development projects independently. It is adaptable to various working syntax and platforms and brings opportunities to work on various projects.
- The high load can be managed with the help out of the HTTP proxy server & cache.
- Use standard HTTP procedure call-outs to retrieve data and requests.
- Disadvantages:
- Lack of state: most web applications require stateful mechanisms. Suppose you purchase a website which has a mechanism to have a shopping cart. It is required to know the number of items in the shopping cart before the actual purchase is made. This burden of maintaining the state lies on the client, which makes the client application heavy and difficult to maintain.
- Last of security: REST doesn't impose security such as SOAP. That is the reason REST is appropriate for public URLs, but it is not good for confidential data passage between client and server.
- How it fits with the system:
- Description:
- SOAP:
- Description:
- The Simple Object Access Protocol is a messaging protocol. It allows distributed objects to communicate with each other.
- Advantages:
- This protocol is very secure, and is used in many payment systems.
- SOAP has built in error handling, making it a more reliable and maintainable protocol.
- Disadvantages:
- SOAP is very difficult to implement into a system, so it does not scale well.
- SOAP lacks support for most data formats, but this project will be using many different file and data types.
- How it fits with the system:
- The advantages of SOAP do not add anything to the system that other API systems do not, whereas its disadvantages are difficult to overcome for this system.
- Description:
- NestJS:
- Description:
- Nestjs is a progressive Node.js framework for building efficient, reliable and scalable server-side applications by making use of design patterns.
- Advantages:
- The modular structure of nestjs facilitates scalability which is one of our quality requirements.
- Testing is simplified because nestjs supports features such as DI containers and modules.
- Nestjs also allows for the creation of extensible, loosely coupled units which will make implementing the service oriented architecture easier.
- Disadvantages:
- Nestjs on its own does not have good support for machine learning which is a big part of our project.
- The level of abstraction is too generic for certain modules which make it hard to debug if something goes wrong.
- How it fits with the system:
- The Nestjs framework will help solve our core quality requirement for scalability as mentioned above.
- Although nestjs has a high level of abstraction, the implementation of service oriented architecture does not suffer as much as microservices which fits our outlined architecture choices of using service oriented architecture.
- TensorFlow.js is a Node.js package that can be integrated with Nestjs to support our projects machine learning needs.
- Description:
- Python:
-
Description:
- Python is an open source programming language that focusses on code readability.
-
Advantages:
- It is a popular programming language with ample support.
- Good support for Artificial Intelligence which makes the implementation of ML units easier when compared to other languages
- Provides access to frameworks like Django to make web development easier.
-
Disadvantages:
- Python is slow at runtime which will affect our quality requirement for useability.
- Python does not have good mobile support and the main interface of our application is for mobile.
- Python has problems with multi-threading which is bad for our quality requirement of scalability.
-
How it fits with the system:
- The use of Python makes the creation of machine language modules easier.
- However Python does not have the same support for implementing service oriented architecture in comparison to the .NET and Nestjs frameworks.
-
- .NET:
- Description:
- .NET is a free, cross-platform, open source developer platform for building many different types of applications.
- Advantages:
- .NET is a modular, cross-platform framework with good support for mobile.
- .NET also pairs well with service oriented architecture which will assist us in implementing our architecture.
- The .NET framework allows for easy maintenance and scalability because of modular design.
- The .NET framework can be expanded horizontally which benefits from our client-server architecture and increases the scalability of our app.
- Disadvantages:
- Memory leaks are possible in the .NET framework which can negatively effect the usability and reliability of our app.
- The .NET framework involves vendor lock-in which means that future development will only be dependent on Microsoft.
- How it fits with the system:
- .NET will benefit our system because of good support when implementing service oriented architecture through the use of web services along with increased scalability as discussed above.
- The .NET framework provides a machine learning framework which is beneficial to our projects implementation.
- However the memory problems that exist within the framework cemented our decision to use Nestjs.
- Description:
For this project we decided on a document based database for easy scalability of data since our system should be able to handle at least a hundred pdfs per user thus the following document based data bases have been considered:
- MongoDB:
- Description:
- MongoDB is an open-source document database developed on a horizontal scale out architectural type with a customizable data storage schema.
- Advantages:
- MongoDB offers scalability through its horizontal scale out feature.
- MongoDB is a popular choice thus there is a lot of support and resources on how to use MongoDB more efficiently which will help us achieve reliability and availability.
- MongoDB supports replication of data which will increase the reliability of our system.
- MongoDB has a high memory usage which can effect the performance of our system.
- Disadvantages:
- The data size is limited to 16MB per document
- How it fits with the system:
- The horizontal scale out feature of mongoDB fits with the client-server architecture that we are implementing as the server side of client-server can also grow horizontally as is required which makes the higher memory usage less of a problem.
- Reliability is important for the system and MongoDB provides a reliable database through the use of replication.
- Description:
- SimpleDB:
- Description:
- Amazon SimpleDB is a highly available NoSQL data store that offloads the work of database administration
- Advantages:
- SimpleDB provides high availability of data by distributing geographically.
- SimpleDB is flexible and scalable and allows one to make changes easily to accommodate more, or less users.
- Disadvantages:
- There is no service level agreement so there is no guarantee on reliability.
- Has a 10GB upper limit per domain which can restrict the scalability of our system.
- How it fits with the system:
- SimpleDB helps achieve the quality requirements for availability
- However, there is no guarantee on reliability and since reliability is more important for this project SimpleDB is not the best fit.
- Description:
- CouchDB
- Description:
- CouchDB is an open-source database that uses various different formats and protocols to store, transfer and process its data.
- Advantages:
- CouchDB has fast indexing and retrieving which supports our quality requirement for usability by being more responsive to user requests.
- It is easy and fast to create a backup which will help us achieve reliability within our app.
- Disadvantages:
- CouchDB is not widely used, and its documentation is a bit lacking.
- The entire database is stored as a single file which will increases coupling and reduces the availability and flexibility of our app when it comes to database access.
- How it fits with the system:
- CouchDB fits with our system with regards to meeting the quality requirements useability and reliability.
- However, the lack of scalability and documentation in comparison to MongoDB made MongoDB the better choice overall.
- Description:
- Azure:
- Description:
- Azure is a cloud computing service owned by Microsoft. It is a newer service but is fairly popular.
- Advantages:
- Azure is secure, scalable and has high availability.
- Azure is a very cost effective hosting service.
- Disadvantages:
- The main disadvantage of Azure is the platform specific knowledge required to use it effectively.
- How it fits with the system:
- Azure was the first preference of our clients.
- It meets the scalability and availability quality requirements of our system.
- It also provides good data security.
- The affordable cost is another contributing factor as to why we decided to use Azure for our hosting needs.
- Description:
- Amazon Web Services:
- Description:
- AWS is a subsidiary of Amazon. It is one of the oldest services in the cloud market with a large userbase.
- Advantages:
- AWS has a large number of services that can speed up development and allow for better maintainability.
- AWS provides scalability and security to the system without much setup.
- Disadvantages:
- AWS is a fairly expensive service and their pricing strategy can be confusing.
- How it fits with the system:
- Amazon Web Services is a mature hosting service that has a lot of utility.
- It was the second choice preference of the clients.
- The cost, however, is an issue and so we decided against using it.
- Description:
- Google Cloud:
- Description:
- Google Cloud Platform is a suite of cloud services that are run on the same infrastructure that Google uses for its other products.
- Advantages:
- Google Cloud is a leader in providing machine learning and AI services, and so integrates with the goal of the project well.
- It has an edge over its competitors in the container field, as Google has developed the Kubernetes framework that is now widely used across the industry.
- Disadvantages:
- Google Cloud lacks the number of data centers that its competitors have, which may result in geographical constraints for its users.
- How it fits with the system:
- Google Cloud is one of the newer hosting platforms, however, it has various advantages that are relevant to our project.
- The smaller number of data centers may cause availability issues
- This service was ranked third in preference by our clients so we decided against using it.
- Description: