From c4ce990f37e952cb159fff072c12bd5b13bb012d Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 16 May 2022 09:46:08 +0300 Subject: [PATCH 1/5] Create app-nolayers documentation --- .../Application-Single-Layer.md | 68 +++++++++++++++++++ docs/en/docs-nav.json | 4 ++ 2 files changed, 72 insertions(+) create mode 100644 docs/en/Startup-Templates/Application-Single-Layer.md diff --git a/docs/en/Startup-Templates/Application-Single-Layer.md b/docs/en/Startup-Templates/Application-Single-Layer.md new file mode 100644 index 0000000000..d9674b0fd6 --- /dev/null +++ b/docs/en/Startup-Templates/Application-Single-Layer.md @@ -0,0 +1,68 @@ +# Application (Single Layer) Startup Template + +## Introduction + +This template provides a single-layered application for quick start with ABP Framework. + +This document explains the **solution structure** and project in details. If you want to start quickly, you can follow the guides below: + + + +### What is the Difference Between the Application Startup Template? + +ABP's [Application Startup Template](Application.md) provides a well-organized and layered solution to create maintainable business applications based on the [Domain Driven Design](../Domain-Driven-Design.md) (DDD) practises. However, some developers find this template little bit complex (or unneccessary) for simple and short-time applications. + +In that point, for such applications a single-layered application template is created. Time template has the same functionality, features and modules on runtime with the [Application Startup Template](Application.md) but the development model is minimal and everything is in the single project (`.csproj`). + +## How to Start with? + +You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download from the [Get Started](https://abp.io/get-started) page. How to download via CLI is explained in this section. + +First, install the ABP CLI if you haven't installed before: + +```bash +dotnet tool install -g Volo.Abp.Cli +``` + +Then, use the `abp new` command in an empty folder to create a new solution: + +```bash +abp new Acme.BookStore -t app-nolayers +``` + +* `Acme.BookStore` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. +* This example specifies the template name (`-t` or `--template` option). + +### Specify the UI Framework + +This template provides multiple UI frameworks: + +* `mvc`: ASP.NET Core MVC UI with Razor Pages +* `blazor-server`: Blazor Server UI +* `angular`: Angular UI +* `none`: Without UI + +If you choose `Angular` as the UI framework, the solution is being separated into two folders: + +* `angular` folder contains the Angular UI application, the client-side code. +* `aspnet-core` folder contains the ASP.NET Core solution, the server-side code. \ No newline at end of file diff --git a/docs/en/images/bookstore-single-layer-solution-structure.png b/docs/en/images/bookstore-single-layer-solution-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..edc495d909ac14d7560b8a83e9ddfeb038cc5941 GIT binary patch literal 23834 zcma%iby!qw_wFF2q_i~BjYvsLcXtWW-Q9v9ozmSflynIrAdPg_(A_BvaklUKo$tKA zyv`q7%m!xWna#8Ab;o+bl@+DXQHW4LAP~BYw74n=1g8&twLC`xe$tf_MGAa_b5WHN z1yzlZ>;V@D79t8FAW%&#>itJV;QEE5w2li1gwg%y3$D+h)D#5Lua*%PQTP0C)Q;|} zKArXSr173g2rdXqhBg|Gq!ZaPK$b?bz^rZGGN7^&Qg8K(9NDHk)O|7O*uF2l*shdo zIlzi|)}Cd&*lZ5h{YXiszRjqwxARNmbD^=d*F6KD>GGb_V^Qv&_>KyCY_Fv8b9m6E zWn^q#Y`Ynzxg59b2z~b5_JQmy!Fcy6=0hQ-+R48(Yz{jYpYCjS%2oX>`%ZaVRg#c%F7~pY?(hXqUsSrT%^tJo z)M+DmW6Y%9*z~-wep-!tct_|}!O&;npw~w2&olohjCSmQkr(μunD;R&@nSR~pp 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 Oq^YK>T72L7`F{bF#X9)_ literal 0 HcmV?d00001 diff --git a/docs/en/images/single-layer-folder-structure.png b/docs/en/images/single-layer-folder-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..06aa77049c1238e3403a09511f2a5344f37fc35b GIT binary patch literal 4485 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 bK=HExPO~rp&hKh%L4_$S^5cB}JixyI@2h!m literal 0 HcmV?d00001 From 79e57e86d53df6a67c76f36cd1b9925aeb96ef4f Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Mon, 16 May 2022 15:17:20 +0300 Subject: [PATCH 3/5] Update the Application-Single-Layer.md --- .../Application-Single-Layer.md | 53 ++++++++++-------- .../single-layer-angular-folder-structure.png | Bin 0 -> 16705 bytes 2 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 docs/en/images/single-layer-angular-folder-structure.png diff --git a/docs/en/Startup-Templates/Application-Single-Layer.md b/docs/en/Startup-Templates/Application-Single-Layer.md index 651988dcac..245ef435c1 100644 --- a/docs/en/Startup-Templates/Application-Single-Layer.md +++ b/docs/en/Startup-Templates/Application-Single-Layer.md @@ -2,23 +2,21 @@ ## Introduction -This template provides a single-layered application for quick start with ABP Framework. +This template provides a single-layered application for a quick start with ABP Framework. -This document explains the **solution structure** and project in details. If you want to start quickly, you can follow the guides below: - - +This document explains the **solution structure** and project in detail. ### What is the Difference Between the Application Startup Template? -ABP's [Application Startup Template](Application.md) provides a well-organized and layered solution to create maintainable business applications based on the [Domain Driven Design](../Domain-Driven-Design.md) (DDD) practises. However, some developers find this template little bit complex (or unneccessary) for simple and short-time applications. +ABP's [Application Startup Template](Application.md) provides a well-organized and layered solution to create maintainable business applications based on the [Domain Driven Design](../Domain-Driven-Design.md) (DDD) practices. However, some developers find this template a little bit complex (or unnecessary) for simple and short-time applications. -In that point, for such applications a single-layered application template is created. This template has the same functionality, features and modules on runtime with the [Application Startup Template](Application.md) and ABP modules are already installed but the development model is minimal and everything is in the single project (`.csproj`). +At this point, a single-layer application template has been created for such applications. This template has the same functionality, features and modules on runtime with the [Application Startup Template](Application.md) but the development model is minimal and everything is in a single project (`.csproj`). ## How to Start with? -You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download from the [Get Started](https://abp.io/get-started) page. How to download via CLI is explained in this section. +You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download this startup template from the [Get Started](https://abp.io/get-started) page. How to download via CLI is explained in this section. -First, install the ABP CLI if you haven't installed before: +Firstly, install the ABP CLI if you haven't installed it before: ```bash dotnet tool install -g Volo.Abp.Cli @@ -30,9 +28,9 @@ Then, use the `abp new` command in an empty folder to create a new solution: abp new Acme.BookStore -t app-nolayers ``` -* `Acme.BookStore` is the solution name, like *YourCompany.YourProduct*. You can use single level, two-levels or three-levels naming. -* This example specifies the template name (`-t` or `--template` option). - +* `Acme.BookStore` is the solution name, like *YourCompany.YourProduct*. You can use single-level, two-level or three-level naming. +* In this example, the `-t` option (or `--template` option) specifies the template name. + ### Specify the UI Framework This template provides multiple UI frameworks: @@ -42,15 +40,15 @@ This template provides multiple UI frameworks: * `angular`: Angular UI * `none`: Without UI -> Currently, this template doesn't have Blazor WASM UI, because it requries 3 projects at least (server-side, UI and shared library between these two projects). We'll consider to add Blazor WASM UI support based on your feedback. +> Currently, this template doesn't have Blazor WASM UI, because it requires 3 projects at least (server-side, UI and shared library between these two projects). -Use the `-u` or `--ui` option to specify the UI framework, while creating the solution: +Use the `-u` or `--ui` option to specify the UI framework while creating the solution: ```bash abp new Acme.BookStore -t app-nolayers -u angular ``` -* This example specifies the UI type (`-u` option) as `angular`, you can also specify the `mvc` or `blazor-server` for UI type. +* This example specifies the UI type (`-u` option) as `angular`, you can also specify `mvc` or `blazor-server` for UI type. ### Specify the Database Provider @@ -62,26 +60,27 @@ This template supports the following database providers: Use the `-d` (or `--database-provider`) option to specify the database provider while creating the solution: ```bash -abp new Acme.BookStore -d mongodb +abp new Acme.BookStore -t app-nolayers -d mongodb ``` ## Solution Structure -If you don't specify any additional option while creating an `app-nolayers` template, you will have a solution like shown below: +If you don't specify any additional options while creating an `app-nolayers` template, you will have a solution like shown below: ![](../images/bookstore-single-layer-solution-structure.png) -As you can see, it's a single layer template rather than a layered-architecture solution (like `Application Startup Template`). +As you can see, it's a single-layer template rather than a layered-architecture solution (like the `Application Startup Template`). ### Folder Structure -Since this template provides single layer solution, we've seperated concerns into folders instead of layers and you can see the pre-defined folders like shown below: +Since this template provides single-layer solution, we've separated concerns into folders instead of layers and you can see the pre-defined folders like shown below: ![](../images/single-layer-folder-structure.png) -* You can define your `entities`, `application services`, `DTOs` etc. in this single project (in the related folders). +* You can define your `entities`, `application services`, `DTOs`, etc. in this single project (in the related folders). +* For example, you can define your `application services` and `DTOs` under the **Services** folder. -## How to Run? +### How to Run? Before running the application, you need to create the database and seed the initial data. To do that, you can run the following command in the directory of your project: @@ -89,13 +88,21 @@ Before running the application, you need to create the database and seed the ini dotnet run --migrate-database ``` -* This command will create the database and seed the initial data for you. Then you can run the application with any IDE that supports .NET or by running the `dotnet run` CLI command in the directory of your project. Default username is `admin` and password is `1q2w3E*`. +* This command will create the database and seed the initial data for you. Then you can run the application with any IDE that supports .NET or by running the `dotnet run` CLI command in the directory of your project. The default username is `admin` and the password is `1q2w3E*`. + +> While creating a database & applying migrations seem only necessary for relational databases, this project comes even if you choose a NoSQL database provider (like MongoDB). In that case, it still seeds the initial data which is necessary for the application. > If you create an `app-nolayers` template with **Angular UI** you also need to run the angular project to see the UI. -### Angular UI +### Angular UI If you choose `Angular` as the UI framework, the solution is being separated into two folders: * `angular` folder contains the Angular UI application, the client-side code. -* `aspnet-core` folder contains the ASP.NET Core solution, the server-side code. \ No newline at end of file +* `aspnet-core` folder contains the ASP.NET Core solution (a single project), the server-side code. + +The server-side is similar to the solution described in the [Solution Structure](#solution-structure) section above. This project serves the API, so the `Angular` application can consume it. + +Angular application folder structure looks like below: + +![](../images/single-layer-angular-folder-structure.png) \ No newline at end of file diff --git a/docs/en/images/single-layer-angular-folder-structure.png b/docs/en/images/single-layer-angular-folder-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..91fe09d61e2af7db8fd2a9e79247f349314c6041 GIT binary patch literal 16705 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 Date: Tue, 17 May 2022 10:51:31 +0300 Subject: [PATCH 4/5] Update Application-Single-Layer.md --- docs/en/Startup-Templates/Application-Single-Layer.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/en/Startup-Templates/Application-Single-Layer.md b/docs/en/Startup-Templates/Application-Single-Layer.md index 245ef435c1..81f9e169df 100644 --- a/docs/en/Startup-Templates/Application-Single-Layer.md +++ b/docs/en/Startup-Templates/Application-Single-Layer.md @@ -69,7 +69,7 @@ If you don't specify any additional options while creating an `app-nolayers` tem ![](../images/bookstore-single-layer-solution-structure.png) -As you can see, it's a single-layer template rather than a layered-architecture solution (like the `Application Startup Template`). +It's a single-layer template rather than a layered-architecture solution (like the `Application Startup Template`). It's helpful to create a running application quickly without considering the layered architecture. ### Folder Structure @@ -92,8 +92,6 @@ dotnet run --migrate-database > While creating a database & applying migrations seem only necessary for relational databases, this project comes even if you choose a NoSQL database provider (like MongoDB). In that case, it still seeds the initial data which is necessary for the application. -> If you create an `app-nolayers` template with **Angular UI** you also need to run the angular project to see the UI. - ### Angular UI If you choose `Angular` as the UI framework, the solution is being separated into two folders: @@ -103,6 +101,6 @@ If you choose `Angular` as the UI framework, the solution is being separated int The server-side is similar to the solution described in the [Solution Structure](#solution-structure) section above. This project serves the API, so the `Angular` application can consume it. -Angular application folder structure looks like below: +The client-side application consumes the HTTP APIs as mentioned. You can see the folder structure of the Angular project shown below: -![](../images/single-layer-angular-folder-structure.png) \ No newline at end of file +![](../images/single-layer-angular-folder-structure.png) From 2b0e78f367182429686ee464b4af044699c13097 Mon Sep 17 00:00:00 2001 From: Hamza Albreem <94292623+braim23@users.noreply.github.com> Date: Tue, 17 May 2022 14:34:59 +0300 Subject: [PATCH 5/5] Update Application-Single-Layer.md --- .../Startup-Templates/Application-Single-Layer.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/en/Startup-Templates/Application-Single-Layer.md b/docs/en/Startup-Templates/Application-Single-Layer.md index 81f9e169df..ce194d7585 100644 --- a/docs/en/Startup-Templates/Application-Single-Layer.md +++ b/docs/en/Startup-Templates/Application-Single-Layer.md @@ -6,13 +6,13 @@ This template provides a single-layered application for a quick start with ABP F This document explains the **solution structure** and project in detail. -### What is the Difference Between the Application Startup Template? +### What is the Difference Between the Application Startup Templates? ABP's [Application Startup Template](Application.md) provides a well-organized and layered solution to create maintainable business applications based on the [Domain Driven Design](../Domain-Driven-Design.md) (DDD) practices. However, some developers find this template a little bit complex (or unnecessary) for simple and short-time applications. At this point, a single-layer application template has been created for such applications. This template has the same functionality, features and modules on runtime with the [Application Startup Template](Application.md) but the development model is minimal and everything is in a single project (`.csproj`). -## How to Start with? +## How to Start with It? You can use the [ABP CLI](../CLI.md) to create a new project using this startup template. Alternatively, you can directly create & download this startup template from the [Get Started](https://abp.io/get-started) page. How to download via CLI is explained in this section. @@ -65,7 +65,7 @@ abp new Acme.BookStore -t app-nolayers -d mongodb ## Solution Structure -If you don't specify any additional options while creating an `app-nolayers` template, you will have a solution like shown below: +If you don't specify any additional options while creating an `app-nolayers` template, you will have a solution as shown below: ![](../images/bookstore-single-layer-solution-structure.png) @@ -73,7 +73,7 @@ It's a single-layer template rather than a layered-architecture solution (like t ### Folder Structure -Since this template provides single-layer solution, we've separated concerns into folders instead of layers and you can see the pre-defined folders like shown below: +Since this template provides a single-layer solution, we've separated concerns into folders instead of layers and you can see the pre-defined folders as shown below: ![](../images/single-layer-folder-structure.png) @@ -94,10 +94,10 @@ dotnet run --migrate-database ### Angular UI -If you choose `Angular` as the UI framework, the solution is being separated into two folders: +If you choose `Angular` as the UI framework, the solution will be separated into two folders: -* `angular` folder contains the Angular UI application, the client-side code. -* `aspnet-core` folder contains the ASP.NET Core solution (a single project), the server-side code. +* An `angular` folder that contains the Angular UI application, the client-side code. +* An `aspnet-core` folder that contains the ASP.NET Core solution (a single project), the server-side code. The server-side is similar to the solution described in the [Solution Structure](#solution-structure) section above. This project serves the API, so the `Angular` application can consume it.