C# 架构模式:将混乱变为有序

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# 架构模式:别让你的代码变成意大利面条

\n\n

每位 C# 开发者迟早都会遇到项目开始像一盘煮过头的意大利面的时刻。500 行的方法、无所不知的类,以及比兔子繁殖还快的 bug。熟悉吗?是时候聊聊 C# 架构模式了。

\n\n

在本文中,我们不会进行枯燥的讲解。我们将分析哪些 C# 架构模式 能真正拯救项目,展示 C# 代码示例,并给出清晰的选择标准。开始吧!

\n\n

MVC 模式:永不褪色的经典

\n\n

Model-View-Controller (MVC) 可以说是 Web 应用程序中最流行的 C# 架构模式。其主要思想是将职责分为三大支柱:数据 (Model)、显示 (View) 和控制逻辑 (Controller)。

\n\n

实际中如何运作?

\n\n

想象一个在线商店。用户点击“添加到购物车”按钮——这是给 Controller 的信号。Controller 请求 Model 更新数据。Model 说:“完成!”。Controller 选择合适的 View 并将最新数据发送给它。View 只是绘制它收到的内容。

\n\n

以下是一个用于 ASP.NET Core MVC 的最小 C# 代码示例:

\n\n
// Model\npublic class Product\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n\n// Controller\npublic class ProductController : Controller\n{\n    private readonly AppDbContext _context;\n\n    public ProductController(AppDbContext context)\n    {\n        _context = context;\n    }\n\n    public IActionResult Index()\n    {\n        var products = _context.Products.ToList();\n        return View(products); // View 自行决定如何渲染列表\n    }\n}
\n\n

何时使用: 具有丰富 UI 的 Web 应用程序,需要清晰分离逻辑和表示。非常适合基于 ASP.NET Core 的 C# 应用程序架构。

\n\n

MVP 模式:适用于熟悉 Windows Forms 的开发者

\n\n

Model-View-Presenter (MVP) 是 MVC 的“老大哥”,特别适合 WinForms 或 WPF 的桌面应用程序。主要区别:View 是一个被动的“傀儡”,而 Presenter 管理整个过程。

\n\n

WinForms 示例

\n\n
// View 接口(被动)\npublic interface ILoginView\n{\n    string UserName { get; }\n    string Password { get; }\n    event EventHandler LoginClicked;\n    void ShowError(string message);\n}\n\n// Presenter(主动指挥者)\npublic class LoginPresenter\n{\n    private readonly ILoginView _view;\n    private readonly IAuthService _authService;\n\n    public LoginPresenter(ILoginView view, IAuthService authService)\n    {\n        _view = view;\n        _authService = authService;\n        _view.LoginClicked += OnLoginClicked;\n    }\n\n    private void OnLoginClicked(object sender, EventArgs e)\n    {\n        if (_authService.Authenticate(_view.UserName, _view.Password))\n        {\n            // 跳转到主窗体\n        }\n        else\n        {\n            _view.ShowError("用户名或密码错误");\n        }\n    }\n}
\n\n

优点: View 可以通过替换为 mock 对象轻松测试。 缺点: 代码量增加,但变得可预测。

\n\n

Repository 模式:隐藏数据库的复杂性

\n\n

C# Repository 模式 是业务逻辑与数据存储之间的中间层。您无需在整个代码中散布 SQL 查询,而是创建一个用于处理实体的统一“仓库”。

\n\n

Entity Framework Core 示例

\n\n
public interface IProductRepository\n{\n    Task<Product> GetByIdAsync(int id);\n    Task<IEnumerable<Product>> GetAllAsync()                

博客

书籍推荐