C# Blazor项目结构/最佳实践
我的公司正在从传统的代码库转移到更现代的平台,我们正在转移到Blazor。我们目前正在参与ORM和最佳实践,在项目设置方面似乎有很多相互矛盾的想法(至少从我收集的资料来看)。我目前的结构如下: 首先是一个名为DAL的类库——这是我们的“数据层”。我们使用的是Dapper,它相对简单。示例类如下所示:C# Blazor项目结构/最佳实践,c#,mvvm,.net-core,blazor,blazor-server-side,C#,Mvvm,.net Core,Blazor,Blazor Server Side,我的公司正在从传统的代码库转移到更现代的平台,我们正在转移到Blazor。我们目前正在参与ORM和最佳实践,在项目设置方面似乎有很多相互矛盾的想法(至少从我收集的资料来看)。我目前的结构如下: 首先是一个名为DAL的类库——这是我们的“数据层”。我们使用的是Dapper,它相对简单。示例类如下所示: public class Person { public string Id {get; set;} public string FirstName {get; set;}
public class Person
{
public string Id {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public Person() {}
public Person(DbContext context) {}
public void GetPerson(int id) {}
public void DeletePerson(int id) {}
etc....
}
@code{
[Parameter]
int EmployeeId;
public decimal bonus;
protected override OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
return;
EmployeeService.Get(EmployeeId); //reference Employee on page with EmployeeService.CurrentEmployee
}
public void GetBonus()
{
bonus = EmployeeService.CalculateBonus();
}
}
第二个项目是一个服务器Blazor项目,它引用了DAL项目。项目划分如下:
public class EmployeeModel
{
public int Id {get; set;}
public int Department{get; set;}
public DateTime HireDate {get; set;}
public decimal Salary {get; set;}
public Person {get; set;}
}
public class EmployeeModel
{
public int Id {get; set;}
public int Department{get; set;}
public DateTime HireDate {get; set;}
public decimal Salary {get; set;}
public Person {get; set;}
}
public class EmployeeService
{
private EmployeeModel _employeeModel;
public EmployeeService(EmployeeModel employeeModel)
{
_employeeModel = employeeModel;
}
private EmployeeModel currentEmployee;
public EmployeeModel CurrentEmployee
{
get { return currentEmployee}
}
{
set {currentEmployee = value; }
}
public Task<EmployeeModel> Get(int id)
{
currentEmployee = EmployeeModel.Get(id);
}
public Task<int>CalculateBonus()
{
//logic implemented here with properties instead of parameters...
}
}
鉴于我一直在使用遗留代码,而且没有一位资深人士告诉我其他情况,我只想知道我做得对。这一点尤其正确,因为这应该是我们未来业务的核心,我不想以意大利面条式的代码结束,也不想做一个完整的重构
我想我的问题如下:
提前感谢您的帮助 我刚刚创建了一个新的ASP.NET Core 3.1项目,其中包含3个web应用程序:MVC、Razor Pages和Blazor 网络学习者: 我正在并行开发所有3个,以便您可以在所有这些中看到类似的功能。我已将常用项提取到共享库中,以便于共享 共享库包括:
- 核心项目(模型和服务)
- 基础架构项目(数据库上下文和迁移)
- 博文:
所以我开始寻找更多的示例项目,我发现了一个SPA服务器端整洁的应用程序()。从我在那里、这里以及我所看到的其他地方收集的信息来看,添加一个单独的项目来处理CRUD操作似乎比它的价值更麻烦 我将按照链接中的内容实现一些东西,并看看它是如何运行的。如果其他人正在寻找灵感,这里有一些很好的例子: FWIW,每个示例似乎都遵循这条路径,只是似乎以稍微不同的方式进行(ORM使用、文件夹名称等)。这意味着我需要添加更多的服务(至少总共20个),但如果它是一个复杂的业务应用程序,我想这就是野兽的本质
快乐编码 在使用三层体系结构时,我看到业务层将增长,某些时间点会变得非常混乱和紧密耦合 我建议试试看,它非常受欢迎,而且非常类似于 我确信您正在寻找一些示例应用程序,以了解如何保持每一层的独立性,什么是最佳实践和最佳库 试试下面的链接,你会在youtube上看到很多视频 由于Blazor Web Assembly仍在预览中,我开始将我的个人网站从asp.netcore 2.0迁移到Blazor客户端和服务器端的Azure功能 这是我的应用程序结构
@code{
[Parameter]
int EmployeeId;
public decimal bonus;
protected override OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
return;
EmployeeService.Get(EmployeeId); //reference Employee on page with EmployeeService.CurrentEmployee
}
public void GetBonus()
{
bonus = EmployeeService.CalculateBonus();
}
}