Posted on: 05/07/2018
Updated on: 10/08/2018
Task done/total: 6/88
This is one of my recent personal projects, in which I aim to develop my technical skills and explore new technologies.
The AIOReviews application is being developed using ASP.NET Core MVC Framework, KnockOutJS and Transact-SQL as the main development techniques. Some other tools that are also using include Git for version control, Semantic UI for layouts, Emoji CSS and FontAwesome for contents, Google+ and Facebook Login APIs for account registration, Trello for development tracking, Visual Studio 2017 and MS SQL Express 2017.
The AIOReviews is a web application that allows everyone to review everything. For example, one member can post any products or services as the item for review, then other members can review it. The types of items are not restricted, that means they can post whatever that can be reviewed like an online store, a seller on an online shopping site, a news publisher, a movie or a song. Members of the website will get points to increase their ranking, however, if they violate the site's T&C, they may loose points and ranking. If one member has enough ranking, he can post a formal review for anything, which has a structure and is supported by various plug-ins implemented in the app. Some other features include a Q&A system (question and answer) and the features that manage user activities on the site.
Please look at the attachment "ER Diagram" to have an initial picture of the whole system design. For the time being, there are 48 tables in the databse (maybe more). It will result in a highly coupled structure if I would implement the app in the monolithic way, which is a single system that handles everything. That way, the app will become "unhealthy" as it's hard for testing, maintaining, expanding and refactoring, ect... Therefore, the implementation of AIOReviews is designed in Microservice architecture. The whole large system is divided into 4 sub-systems, each of which will only responsible for a specific feature, which contains the functionalities that are closely related together. Each sub-system is an API that plays the role as the intermediator between the ViewModel (inside of View) and the Model. You can find below the description of each sub-system:
To ensure data integrity when working with different databases, I use database function with CHECK
constraint to verify the existence of database records. Some other database features I also use include trigger and stored procedure.
If you would like to look at the development progress, please have a look at my Trello and Github.