【问题标题】:When naming objects in an OOP language, what is the difference between "map" and "transform"?在 OOP 语言中命名对象时,“map”和“transform”有什么区别?
【发布时间】:2014-06-30 05:12:57
【问题描述】:

对我来说,命名是软件工程中的一个关键概念。出于这个原因,我是设计模式的忠实粉丝,因为它为我(我认为是)常见的模式/对象提供了合适的名称。

在创建旨在将一个对象转换为另一个对象的对象时,反之亦然,我通常使用名称“map”:

IDictionary<long, User> _userIdMap = new // ...

public class UserMapper
{
    UserModel ToModel(UserViewModelModel viewModelModel) { ... }
    UserViewModelModel ToViewModelModel(UserModel model) { ... }
}

但是最近我加入了一个项目,其中这种性质的对象被称为变形金刚,我明白为什么它们也可以这样称呼。

我的理解是,当存在明确的双向一对一关系时,术语“映射”是合适的:如果 ObjectB 可以“映射”到 ObjectA,则 ObjectA 可以“映射”到 ObjectB。如果这种关系是单向的,那么(我的理解是)它并不是经典计算机科学术语中的真正“地图”。

映射器、转换器、转换器或将一个对象更改为另一个对象的其他(此处未提及)名称之间是否存在标准的传统区别,如果有,命名时应考虑哪些描述或经验法则这些对象?

【问题讨论】:

  • 我同意你的解释。也许你想看看范畴论?

标签: oop map transformation naming conventions


【解决方案1】:

在计算机科学中,“映射”用于将已知值/实体与另一个已知值/实体相关联,例如,在您的问题中,ObjectA 可以映射到 ObjectB。

“转换”用于使用函数将任何可接受的值转换/转换为另一个值,例如计算 x^2 的“变换”; x 可以是任何值。

因此,作为“经验法则”,如果有限组对象/值具有明确的关系,则应使用映射,而如果处理非- 有限的值/实体集,其中应使用函数计算值。

【讨论】:

  • 或者等效地,地图被查找而变换被执行
  • @PaulHicks 是的,当我说“有限的对象/值集具有明确的关系”时,我的意思是“查找”地图。 +1 虽然明确说明“查找”和“执行”:)
  • 请注意,这与 OOP 或设计模式几乎没有关系:它是所有 CS 中的惯用术语。 (但在数学中,地图可能是无限的。)
  • 你们中有人对“转换”与“转换”有什么想法吗?我更喜欢这个术语,但我也很好奇随机程序员(即你们)是否对这个规范术语有先入为主的概念。
  • @MartinBliss 因为我有科学背景,所以我更喜欢使用“转换”这个词,因为这在mathematics 中通常被称为。
猜你喜欢
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
相关资源
最近更新 更多