操纵实体的类的名称

时间:2010-03-12 16:09:06

标签: c# java language-agnostic naming-conventions

我有一个关于命名约定的一般问题。

如果我将数据和操作分成两个单独的类。一个具有数据元素(实体),另一个类操纵实体类。我们通常称那个操纵实体类的类是什么?

(我指的实体与任何类型的实体框架无关)

管理器?控制器?运营商?机械手?

提前致谢

5 个答案:

答案 0 :(得分:22)

这取决于您对这些数据合同/实体所执行的操作类型。以下是我的一些惯例。让我们使用Fruit实体的例子(我并不是要暗示这些都是静态方法,只是伪代码):

  • 存储库:在一块水果上提供CRUD操作
    • FruitRepository.Save(Fruit item);
  • 经理:简单CRUD之外的操作。
    • InventoryManager.ShipFruit(Fruit[] items, string address);
  • 控制器:保留用于界面,如在Model-View- Controller 中。使界面或流程决策如何在水果上显示或操作。
    • FruitController.ShowDetails(string fruitId);
  • 处理器:用于“批处理”的操作。通常这些都是长期运行或脱机完成的。
    • FruitProcessor.RemoveSeeds(Fruit[] lotsOfFruit);
  • 操纵器:对单个实体或其集合提供特定操作。
    • FruitManipulator.PeelFruit(Fruit item);
  • 提供商:提供更多通用或全局操作。
    • FruitProvider.GetAllTypesOfFruit();
    • FruitProvider.IsInSeason(string fruitName);
  • 导出程序:将一些水果转换为用于文件存储或传输的格式。
    • FruitExporter.Save(string spreadsheet);
  • 分析器:提供有关单个水果或数量的结果。
    • FruitAnalyzer.Weigh(Fruit[] items);
  • 服务:以松散耦合或远程访问方式公开功能。
  • 汇编程序:通过组合不同的数据源来创建水果。
    • FruitAssembler.Combine(string speciesFile, string quantitiesFile);
  • 工厂:负责创建/实例化水果。
    • FruitFactory.CreateApple(); // red delicious, McIntosh, etc
  • 构建器:提供一种通过单个部件/属性构建水果的方法。
    • FruitBuilder.AddSeeds(5); FruitBuilder.AddStem();

这些都有些松散。主要目标是在您自己的代码库中保持一致,避免与您正在使用的技术发生冲突 - 即。如果您正在使用ASP.NET MVC,那么没有很多不是控制器的Controller类。

答案 1 :(得分:1)

  

我将数据和操作分成两个单独的类。

别。面对面向对象的设计,这种情况很渺茫。

答案 2 :(得分:1)

我经常和经理一起去。

答案 3 :(得分:1)

无论你喜欢什么,都要调用它,只要确保在整个项目中始终使用该名称。我们最接近的是CapabilityReceiver,但即使这样,这些也不是你所说的。

然而

您是否有将数据与方法分离的具体原因?除非你谈论一个班级和它的工厂,否则我真的会感到惊讶,如果这种分离是真正有道理的。

答案 4 :(得分:1)

我们的理由如下:

  • 如果逻辑使用仅一个实体,请将其移至实体本身(请参阅富域模型与贫血域模型)。

  • 因此,大多数这些类都是实现处理多个实体的逻辑的类,因此代表协作

不应根据责任来命名此类。诸如managercontrollermanipulator等技术术语仍可用于命名约定,但重要的部分是名称的第一部分。

示例:

  • 实体:产品客户
  • 两者之间的协作: PurchaseService < - 重要的是购买,而不是服务