Winforms - 最佳目录/项目结构

本文关键字:项目 结构 最佳 Winforms | 更新日期: 2023-09-27 17:47:21

想看看人们对在 winforms C# 应用程序的项目/解决方案上组织目录和项目结构的最佳方式的想法。

大多数人都认为最好将视图、业务逻辑、数据对象、接口分开,但想看看不同的人是如何解决这个问题的。 此外,将第三方依赖项隔离到实现项目中,然后接口导出使用者引用的项目

  • View.csproj
  • BusinessLogic.csproj
  • Data.csproj
  • CalculatorService.Exported.csproj (interfaces)
  • CalculatorService.MyCalcImpl.csproj (one implementation)
  • CalculatorService.MyCalcImpl2.csproj (另一个实现)

    另外,在文件夹结构方面,什么是更好的嵌套:

    接口
    ---IFoo
    ---IData
    英普尔
    ---福
    ---数据

    产品
    ---接口/接口
    ---性能/产品

    傅---Impl/Foo
    ---接口/IFoo

    所有这些都试图推动对抽象的解耦依赖和快速更改实现的能力。

    思潮?最佳实践?

  • Winforms - 最佳目录/项目结构

    对我来说,

    这取决于我所遵循的模型。如果我使用 MVC,那将是

    Project
    -Models
    -Controllers
    -Views
    

    或者对于 MVP 来说,这将是

    Project
    -Models
    -Presenters
    -Views
    

    在视图下,我将它们分成与控制器相关的命名空间,即如果我有一个控制器来处理库存交易,我可能会将其作为

    Project
    -Models
    --Inventory
    -Controllers
    --Inventory
    ---TransactionsController.cs
    -Views
    --Inventory
    ---Transactions
    ----EditTransactionsView.dfm
    
    对于接口,

    我将接口放在与实现相同的目录中。

    回答有点晚,但不妨插话。

    我一直在根据项目的实际类型亲自使用文件夹。例如:

    - Project
        + Forms
        + Classes
        + UserControls
        + Resources
        + Data
    

    所以我最终得到:

    new Forms.AboutForm().ShowDialog();
    Controls.Add(new Controls.UberTextBox());
    

    我们通常使SourceSafe项目,项目名称,命名空间和目录结构保持同步。

    例如,将我们的公司名称命名为 XCENT,SourceSafe 结构和 App1 的相应目录结构如下所示:

    'XCENT
    'XCENT'App1
    'XCENT'App1'UI
    'XCENT'App1'UI'Test //test harness for UI
    'XCENT'App1'Data
    'XCENT'App1'Data'Test //test harnesses for Data
    

    等。

    UI 项目名为 XCENT。App1.UI.cproj,以及该命名空间中的类是 XCENT。应用1.UI

    我们也为许多客户工作,因此专门为他们工作以他们的名字为前缀。客户端 1''App1''UI 等。

    我们公司的每个人都使用相同的惯例,并且立即清楚所有内容都适合。

    如果进一步分割逻辑间距是有意义的,我们会这样做。此类其他细分包括 。出口。进口。报告。安全性等