"LandingWebsiteExplanation":"A generic landing/public website that can be used for several purposes, like introducing your company, selling your products, etc.",
"LandingWebsiteExplanation":"A generic landing/public website that can be used for several purposes, like introducing your company, selling your products, etc.",
"ThemingExplanationShort":"Use and customize the bootstrap-based standard UI theme or create your own.",
"ThemingExplanationShort":"Use and customize the bootstrap-based standard UI theme or create your own.",
"BootstrapTagHelpersDynamicForms":"Bootstrap Tag Helpers & Dynamic Forms",
"BootstrapTagHelpersDynamicForms":"Bootstrap Tag Helpers & Dynamic Forms",
"BootstrapTagHelpersDynamicFormsExplanation":"Instead of manually writing the repeating details of bootstrap components, Use ABP's tag helpers to simplify them and take advantage of the IntelliSense. Quickly build UI forms based on a C# model using the dynamic form tag helper.",
"BootstrapTagHelpersDynamicFormsExplanation":"Instead of manually writing the repeating details of bootstrap components, use ABP's tag helpers to simplify them and take advantage of the IntelliSense. Quickly build UI forms based on a C# model using the dynamic form tag helper.",
"HTTPAPIsDynamicProxiesExplanation":"Automatically expose application services as REST style HTTP APIs, and consume them with dynamic JavaScript and C# proxies.",
"HTTPAPIsDynamicProxiesExplanation":"Automatically expose application services as REST style HTTP APIs, and consume them with dynamic JavaScript and C# proxies.",
"CompleteArchitectureInfo":"Modern architecture to create maintainable software solutions.",
"CompleteArchitectureInfo":"Modern architecture to create maintainable software solutions.",
"DomainDrivenDesignBasedLayeringModelExplanation":"Helps implement a DDD based layered architecture and builds a maintainable code base.",
"DomainDrivenDesignBasedLayeringModelExplanation":"Helps implement a DDD based layered architecture and build a maintainable code base.",
"DomainDrivenDesignBasedLayeringModelExplanationCont":"Provides startup templates, abstractions, base classes, services, documentation and guides to help you develop your application based on DDD patterns & principles.",
"DomainDrivenDesignBasedLayeringModelExplanationCont":"Provides startup templates, abstractions, base classes, services, documentation and guides to help you develop your application based on DDD patterns & principles.",
"MicroserviceCompatibleModelExplanation":"The core framework & pre-built modules are designed with microservice architecture in mind.",
"MicroserviceCompatibleModelExplanation":"The core framework & pre-built modules are designed with microservice architecture in mind.",
"MicroserviceCompatibleModelExplanationCont":"Provides infrastructure, integrations, samples and documentation to implement microservice solutions easier, while it doesn\u2019t bring additional complexity if you want a monolithic application.",
"MicroserviceCompatibleModelExplanationCont":"Provides infrastructure, integrations, samples and documentation to implement microservice solutions easier, while it doesn\u2019t bring additional complexity if you want a monolithic application.",
@ -82,7 +82,7 @@
"CLI_CommandLineInterface":"CLI (Command Line Interface)",
"CLI_CommandLineInterface":"CLI (Command Line Interface)",
"CLI_CommandLineInterfaceExplanation":"Includes a CLI to help you automate the creation of new projects and the addition of new modules.",
"CLI_CommandLineInterfaceExplanation":"Includes a CLI to help you automate the creation of new projects and the addition of new modules.",
"StartupTemplates":"Startup Templates",
"StartupTemplates":"Startup Templates",
"StartupTemplatesExplanation":"Various startup templates provide a fully configured solution to jump start your development.",
"StartupTemplatesExplanation":"ABP’s application startup template provides a fully configured solution to jump start your development.",
"BasedOnFamiliarTools":"Based on Familiar Tools",
"BasedOnFamiliarTools":"Based on Familiar Tools",
"BasedOnFamiliarToolsExplanation":"Built on and integrated with popular tools you already know. Low learning curve, easy adaptation, comfortable development.",
"BasedOnFamiliarToolsExplanation":"Built on and integrated with popular tools you already know. Low learning curve, easy adaptation, comfortable development.",
"DependencyInjectionByConventions":"Dependency Injection by Conventions",
"DependencyInjectionByConventions":"Dependency Injection by Conventions",
"ABPCLIExplanation":"ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions.",
"ABPCLIExplanation":"ABP CLI (Command Line Interface) is a command line tool to automate some common operations for ABP based solutions.",
"ModularityExplanation":"ABP provides a complete infrastructure to build your own application modules that may have entities, services, database integration, APIs, UI components and so on..",//TODO:strong"your own application modules",-
"ModularityExplanation":"ABP provides a complete infrastructure to build your own application modules that may have entities, services, database integration, APIs, UI components and so on..",//TODO:strong"your own application modules",-
"MultiTenancyExplanation":"ABP framework doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.",
"MultiTenancyExplanation":"ABP framework doesn't only support developing multi-tenant applications, but also makes your code mostly unaware of the multi-tenancy.",
"MultiTenancyExplanation2":"Can automatically determine the current tenant, isolate data of different tenants from each other.",
"MultiTenancyExplanation2":"Can automatically determine the current tenant, isolate data of different tenants from each other.",
@ -61,7 +61,7 @@ public class Book : AggregateRoot<Guid>
* `Book` entity has a `MaxNameLength` that defines the maximum length of the `Name` property.
* `Book` entity has a `MaxNameLength` that defines the maximum length of the `Name` property.
* `Book` constructor and `ChangeName` method to ensure that the `Name` is always a valid value. Notice that `Name`'s setter is not `public`.
* `Book` constructor and `ChangeName` method to ensure that the `Name` is always a valid value. Notice that `Name`'s setter is not `public`.
> ABP does not force you to design your entities like that. It just can have public get/set for all properties. It's your decision to full implement DDD practices.
> ABP does not force you to design your entities like that. It just can have public get/set for all properties. It's your decision to fully implement DDD practices.
### IBookAppService Interface
### IBookAppService Interface
@ -124,13 +124,13 @@ public class BookAppService : ApplicationService, IBookAppService
## Data Transfer Objects
## Data Transfer Objects
Application services gets and returns DTOs instead of entities. ABP does not force this rule. However, exposing entities to presentation layer (or to remote clients) have significant problems and not suggested.
Application services get and return DTOs instead of entities. ABP does not force this rule. However, exposing entities to the presentation layer (or to remote clients) has significant problems and is not suggested.
See the [DTO documentation](Data-Transfer-Objects.md) for more.
See the [DTO documentation](Data-Transfer-Objects.md) for more.
## Object to Object Mapping
## Object to Object Mapping
The `CreateAsync` method above manually creates a `Book` entity from given `CreateBookDto` object. Because the `Book` entity enforces it (we designed it like that).
The `CreateAsync` method above manually creates a `Book` entity from given `CreateBookDto` object, because the `Book` entity enforces it (we designed it like that).
However, in many cases, it's very practical to use **auto object mapping** to set properties of an object from a similar object. ABP provides an [object to object mapping](Object-To-Object-Mapping.md) infrastructure to make this even easier.
However, in many cases, it's very practical to use **auto object mapping** to set properties of an object from a similar object. ABP provides an [object to object mapping](Object-To-Object-Mapping.md) infrastructure to make this even easier.
@ -239,7 +239,7 @@ public interface IBookAppService :
`ICrudAppService` has generic arguments to get the primary key type of the entity and the DTO types for the CRUD operations (it does not get the entity type since the entity type is not exposed to the clients use this interface).
`ICrudAppService` has generic arguments to get the primary key type of the entity and the DTO types for the CRUD operations (it does not get the entity type since the entity type is not exposed to the clients use this interface).
> Creating interface for an application service is a good practice, but not required by the ABP Framework. You can skip the interface part.
> Creating an interface for an application service is good practice, but not required by the ABP Framework. You can skip the interface part.
`ICrudAppService` declares the following methods:
`ICrudAppService` declares the following methods:
@ -359,7 +359,7 @@ public class DistrictAppService
}
}
````
````
This implementation requires you to create a class represents your composite key:
This implementation requires you to create a class that represents your composite key: