ModularSystem.Core
1.35.2
See the version list below for details.
dotnet add package ModularSystem.Core --version 1.35.2
NuGet\Install-Package ModularSystem.Core -Version 1.35.2
<PackageReference Include="ModularSystem.Core" Version="1.35.2" />
paket add ModularSystem.Core --version 1.35.2
#r "nuget: ModularSystem.Core, 1.35.2"
// Install ModularSystem.Core as a Cake Addin #addin nuget:?package=ModularSystem.Core&version=1.35.2 // Install ModularSystem.Core as a Cake Tool #tool nuget:?package=ModularSystem.Core&version=1.35.2
ModularSystem Core (Under Development)
Build a Solid Basic CRUD Within Minutes
This library streamlines the foundational tasks of setting up web servers. ModularSystem aims to automate repetitive aspects of web application development in a modular and simple manner.
Overview
ModularSystem provides a collection of useful classes for daily development tasks. The core philosophy is to maintain a stable API model to facilitate communication between different servers without requiring specific adaptation layers. This enables parsing and understanding the interface exposed by a server without data mapping, typing, or adaptation. The term 'Modular' reflects the system's extensibility, allowing developers to add modules to enhance functionality and promote code reuse.
CRUD Operations
The library offers complete CRUD (Create, Read, Update, Delete) operations, featuring a well-defined query mechanism based on Expression trees.
Generics
The entity interface employs a generic type T
, which inherits from a base class. This design allows the library to apply dynamic CRUD operations to any class. Developers will need to implement or override specific methods, where application-specific logic like validation and presentation can be added.
Entity Interface
The Entity Interface serves as the foundation for CRUD operations. It consolidates validation logic, data access layers, and much more to expose methods through the entity.
Getting Started
To begin, create the data structure for the entity model. This model should implement the
IQueryableModel
interface. Extend fromQueryableBase
to automatically implement all required methods.using ModularSystem.Core; class User : QueryableModel { public string Email { get; set; } public string Password { get; set; } }
Implement the IEntity<T> interface in the entity class. One approach is to extend from Entity<T> and implement the abstract methods.
using ModularSystem.Core; class UserEntity : Entity<User> { // ... }
The raw entity class requires implementation of certain methods and properties:
Example:
using ModularSystem.Core; class UserEntity : Entity<User> { protected IDataAccessObject<User> DataAccessObject { get; } public UserEntity() { //... } protected override MemberExpression CreateIdSelectorExpression (ParameterExpression parameter) { //... } protected override object? TryParseId(string id) { //... } }
The library also provides an Entity Framework implementation, with additional modules offering other implementations.
using ModularSystem.Core; class UserEntity : EFEntity<User> { protected IDataAccessObject<User> DataAccessObject { get; } public UserEntity() { //... } }
Data Access Object Interface (IDAO)
The IDataAccessObject interface houses the code for database access, serving as the entity's I/O interface for a given resource. The core library includes embedded implementations like EFCoreDataAccessObject.
using ModularSystem.Core;
class UserEntity : EFEntity<User>
{
protected IDataAccessObject<User> DataAccessObject { get; }
public UserEntity()
{
DataAccessObject = new EFCoreDataAccessObject<User>(new MyDbContext());
}
}
IValidator<T> Interface
Here you define data validation rules for specific data structures. Implement a validation method to return or throw exceptions if the data is in an invalid state.
public class UserValidator : IValidator<User>
{
public Task<Exception?> ValidateAsync(User instance)
{
//...
}
}
class UserEntity : EFEntity<User>
{
protected IDataAccessObject<User> DataAccessObject { get; }
public UserEntity()
{
DataAccessObject = new EFCoreDataAccessObject<User>(new MyDbContext());
Validator = new UserValidator();
}
}
Wiring it All Together
Entities can be utilized by other layers to create use cases, thus enabling clean and desired code behavior.
public class MyUseCase
{
public async Task DoSomeStuff()
{
var entity = new UserEntity();
var user = new User();
var id = await entity.CreateAsync(user);
}
public async Task DoSomeMoreStuff()
{
var entity = new UserEntity();
var query = new Query<User>().SetFilter(x => x.Email == "foo@bar.baz");
var queryResult = await entity.SearchAsync(query);
}
}
API Controller
Create a basic CRUD API with the ApiController base class, which generates GET, POST, PUT, and DELETE endpoints.
[Route("api/user")]
public class UserController : CrudController<User>
{
protected override IEntity<User> Entity { get; }
public UserController() : base()
{
Entity = new UserEntity();
}
}
WORK IN PROGRESS...
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Microsoft.EntityFrameworkCore (>= 7.0.10)
- Microsoft.EntityFrameworkCore.Sqlite (>= 7.0.10)
- MongoDB.Driver (>= 2.21.0)
- Newtonsoft.Json (>= 13.0.3)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on ModularSystem.Core:
Package | Downloads |
---|---|
PlataformaOmega.IntegrationLibrary
Package Description |
|
Webql
... |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.40.0-prerelease.8 | 122 | 1/10/2024 |
1.40.0-prerelease.7 | 139 | 11/14/2023 |
1.40.0-prerelease.6 | 87 | 11/2/2023 |
1.40.0-prerelease.5 | 85 | 10/20/2023 |
1.40.0-prerelease.4 | 77 | 10/16/2023 |
1.40.0-prerelease.3 | 77 | 10/16/2023 |
1.40.0-prerelease.2 | 80 | 10/16/2023 |
1.40.0-prerelease.1 | 72 | 10/15/2023 |
1.39.1 | 206 | 9/28/2023 |
1.39.0 | 150 | 9/28/2023 |
1.38.2 | 135 | 9/27/2023 |
1.38.1 | 149 | 9/25/2023 |
1.38.0 | 136 | 9/19/2023 |
1.37.3 | 164 | 9/18/2023 |
1.37.2 | 112 | 9/18/2023 |
1.37.1 | 133 | 9/18/2023 |
1.37.0 | 168 | 9/13/2023 |
1.36.0 | 181 | 9/12/2023 |
1.35.6 | 161 | 9/12/2023 |
1.35.5 | 163 | 9/12/2023 |
1.35.4 | 169 | 9/11/2023 |
1.35.3 | 160 | 9/7/2023 |
1.35.2 | 144 | 9/6/2023 |
1.35.1 | 162 | 9/6/2023 |
1.35.0 | 167 | 9/6/2023 |
1.35.0-prerelease.42 | 100 | 8/31/2023 |
1.35.0-prerelease.41 | 80 | 8/31/2023 |
1.35.0-prerelease.40 | 101 | 8/30/2023 |
1.35.0-prerelease.39 | 94 | 8/30/2023 |
1.35.0-prerelease.38 | 100 | 8/29/2023 |
1.35.0-prerelease.37 | 91 | 8/27/2023 |
1.35.0-prerelease.36 | 86 | 8/26/2023 |
1.35.0-prerelease.35 | 86 | 8/26/2023 |
1.35.0-prerelease.34 | 83 | 8/26/2023 |
1.35.0-prerelease.33 | 82 | 8/26/2023 |
1.35.0-prerelease.32 | 89 | 8/25/2023 |
1.35.0-prerelease.31 | 100 | 8/25/2023 |
1.35.0-prerelease.30 | 91 | 8/25/2023 |
1.35.0-prerelease.29 | 92 | 8/25/2023 |
1.35.0-prerelease.28 | 84 | 8/25/2023 |
1.35.0-prerelease.27 | 90 | 8/25/2023 |
1.35.0-prerelease.26 | 80 | 8/25/2023 |
1.35.0-prerelease.25 | 87 | 8/25/2023 |
1.35.0-prerelease.24 | 86 | 8/25/2023 |
1.35.0-prerelease.23 | 93 | 8/24/2023 |
1.35.0-prerelease.22 | 91 | 8/24/2023 |
1.35.0-prerelease.21 | 86 | 8/23/2023 |
1.35.0-prerelease.20 | 82 | 8/23/2023 |
1.35.0-prerelease.19 | 80 | 8/23/2023 |
1.35.0-prerelease.18 | 93 | 8/19/2023 |
1.35.0-prerelease.17 | 86 | 8/19/2023 |
1.35.0-prerelease.16 | 95 | 8/19/2023 |
1.35.0-prerelease.15 | 80 | 8/18/2023 |
1.35.0-prerelease.14 | 86 | 8/16/2023 |
1.35.0-prerelease.13 | 83 | 8/16/2023 |
1.35.0-prerelease.12 | 87 | 8/15/2023 |
1.35.0-prerelease.11 | 95 | 8/14/2023 |
1.35.0-prerelease.10 | 94 | 8/13/2023 |
1.35.0-prerelease.9 | 94 | 8/13/2023 |
1.35.0-prerelease.8 | 98 | 8/9/2023 |
1.35.0-prerelease.7 | 109 | 8/2/2023 |
1.35.0-prerelease.6 | 96 | 8/2/2023 |
1.35.0-prerelease.5 | 103 | 8/2/2023 |
1.35.0-prerelease.4 | 88 | 8/2/2023 |
1.35.0-prerelease.2 | 128 | 8/1/2023 |
1.35.0-prerelease.1 | 105 | 7/25/2023 |
1.34.3 | 188 | 7/14/2023 |
1.34.2 | 209 | 7/11/2023 |
1.34.1 | 190 | 7/11/2023 |
1.34.0 | 155 | 7/11/2023 |
1.33.1 | 187 | 7/6/2023 |
1.33.0 | 191 | 7/6/2023 |
1.32.7 | 188 | 5/31/2023 |
1.32.6 | 243 | 5/31/2023 |
1.32.5 | 184 | 5/31/2023 |
1.32.4 | 176 | 5/31/2023 |
1.32.3 | 193 | 5/30/2023 |
1.32.2 | 237 | 5/30/2023 |
1.32.1 | 228 | 5/30/2023 |
1.32.0 | 169 | 5/26/2023 |
1.31.6 | 208 | 4/25/2023 |
1.31.5 | 214 | 4/25/2023 |
1.31.4 | 291 | 4/24/2023 |
1.31.3 | 226 | 4/21/2023 |
1.31.2 | 196 | 4/20/2023 |
1.31.1 | 138 | 4/14/2023 |
1.31.0 | 200 | 4/6/2023 |
1.30.0 | 137 | 4/4/2023 |
1.29.18 | 459 | 3/18/2023 |
1.29.17 | 338 | 3/18/2023 |
1.29.16 | 266 | 3/16/2023 |
1.29.15 | 266 | 3/16/2023 |
1.29.14 | 254 | 3/14/2023 |
1.29.13 | 538 | 3/9/2023 |
1.29.12 | 530 | 3/6/2023 |
1.29.11 | 276 | 3/3/2023 |
1.29.10 | 268 | 3/3/2023 |
1.29.9 | 362 | 3/2/2023 |
1.29.8 | 353 | 3/2/2023 |
1.29.7 | 629 | 3/1/2023 |
1.29.6 | 265 | 3/1/2023 |
1.29.5 | 361 | 2/27/2023 |
1.29.4 | 274 | 2/27/2023 |
1.29.3 | 285 | 2/25/2023 |
1.29.2 | 298 | 2/24/2023 |
1.29.1 | 311 | 2/24/2023 |
1.29.0 | 290 | 2/24/2023 |
1.28.4 | 277 | 2/22/2023 |
1.28.3 | 371 | 2/18/2023 |
1.28.2 | 291 | 2/18/2023 |
1.28.1 | 300 | 2/17/2023 |
1.28.0 | 457 | 2/16/2023 |
1.27.0 | 298 | 2/8/2023 |
1.26.3 | 307 | 2/7/2023 |
1.26.2 | 308 | 2/7/2023 |
1.26.1 | 297 | 2/7/2023 |
1.26.0 | 305 | 2/6/2023 |
1.25.21 | 315 | 2/4/2023 |
1.25.20 | 421 | 2/4/2023 |
1.25.19 | 312 | 2/4/2023 |
1.25.18 | 309 | 2/4/2023 |
1.25.17 | 299 | 2/3/2023 |
1.25.16 | 329 | 2/3/2023 |
1.25.15 | 306 | 1/28/2023 |
1.25.14 | 317 | 1/28/2023 |
1.25.13 | 317 | 1/27/2023 |
1.25.12 | 347 | 1/27/2023 |
1.25.11 | 477 | 1/27/2023 |
1.25.10 | 335 | 1/27/2023 |
1.25.9 | 416 | 1/20/2023 |
1.25.8 | 354 | 1/20/2023 |
1.25.7 | 352 | 1/20/2023 |
1.25.6 | 363 | 1/20/2023 |
1.25.5 | 332 | 1/20/2023 |
1.25.4 | 410 | 1/20/2023 |
1.25.3 | 334 | 1/20/2023 |
1.25.2 | 332 | 1/20/2023 |
1.25.1 | 341 | 1/19/2023 |
1.25.0 | 355 | 1/19/2023 |
1.24.4 | 583 | 1/13/2023 |
1.24.3 | 366 | 1/13/2023 |
1.24.2 | 344 | 1/13/2023 |
1.24.1 | 369 | 1/13/2023 |
1.24.0 | 345 | 1/13/2023 |
1.23.0 | 605 | 9/14/2022 |
1.22.0 | 509 | 8/27/2022 |
1.21.0 | 491 | 8/16/2022 |
1.20.1 | 526 | 8/4/2022 |
1.20.0 | 647 | 7/23/2022 |
1.19.3 | 536 | 7/8/2022 |
1.19.2 | 546 | 7/8/2022 |
1.19.1 | 936 | 7/7/2022 |
1.19.0 | 517 | 7/7/2022 |
1.18.10 | 662 | 7/6/2022 |
1.18.9 | 948 | 7/2/2022 |
1.18.8 | 518 | 7/2/2022 |
1.18.7 | 548 | 7/2/2022 |
1.18.6 | 544 | 7/2/2022 |
1.18.5 | 521 | 7/2/2022 |
1.18.4 | 518 | 7/2/2022 |
1.18.3 | 519 | 7/1/2022 |
1.18.2 | 531 | 6/28/2022 |
1.18.1 | 567 | 6/28/2022 |
1.18.0 | 511 | 6/27/2022 |
1.17.0 | 542 | 6/27/2022 |
1.16.8 | 558 | 5/16/2022 |
1.16.7 | 568 | 5/12/2022 |
1.16.6 | 572 | 5/10/2022 |
1.16.5 | 589 | 5/10/2022 |
1.16.4 | 570 | 5/10/2022 |
1.16.3 | 568 | 5/10/2022 |
1.16.2 | 590 | 4/30/2022 |
1.16.1 | 579 | 4/30/2022 |
1.16.0 | 577 | 4/30/2022 |
1.15.2 | 587 | 4/28/2022 |
1.15.1 | 570 | 4/27/2022 |
1.15.0 | 1,515 | 4/27/2022 |
1.14.8 | 588 | 4/1/2022 |
1.14.7 | 596 | 4/1/2022 |
1.14.6 | 604 | 4/1/2022 |
1.14.5 | 557 | 4/1/2022 |
1.14.4 | 624 | 3/27/2022 |
1.14.3 | 577 | 3/26/2022 |
1.14.2 | 589 | 3/25/2022 |
1.14.1 | 1,022 | 3/23/2022 |
1.14.0 | 571 | 3/23/2022 |
1.13.1 | 607 | 3/22/2022 |
1.13.0 | 584 | 3/22/2022 |
1.12.2 | 585 | 3/22/2022 |
1.12.1 | 776 | 3/22/2022 |
1.12.0 | 578 | 3/22/2022 |
1.11.2 | 618 | 3/11/2022 |
1.11.1 | 606 | 3/10/2022 |
1.11.0 | 587 | 3/10/2022 |
1.10.0 | 737 | 3/7/2022 |
1.9.2 | 635 | 3/3/2022 |
1.9.1 | 605 | 3/3/2022 |
1.9.0 | 1,683 | 2/26/2022 |
1.8.3 | 591 | 2/26/2022 |
1.8.2 | 609 | 2/1/2022 |
1.8.1 | 613 | 1/24/2022 |
1.8.0 | 621 | 1/24/2022 |
1.7.1 | 664 | 1/19/2022 |
1.7.0 | 618 | 1/19/2022 |
1.6.0 | 613 | 1/19/2022 |
1.5.0 | 638 | 1/19/2022 |
1.4.3 | 515 | 1/14/2022 |
1.4.2 | 512 | 1/14/2022 |
1.4.1 | 620 | 1/13/2022 |
1.4.0 | 515 | 1/13/2022 |
1.3.0 | 661 | 1/12/2022 |
1.2.0 | 522 | 1/11/2022 |
1.1.3 | 532 | 1/11/2022 |
1.1.2 | 514 | 1/11/2022 |
1.1.1 | 524 | 1/11/2022 |
1.1.0 | 524 | 1/11/2022 |
RestfulEndpoint class fixes.