Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在用OOP语言命名对象时,“;“地图”;及;转换;?_Oop_Map_Transformation_Naming_Conventions - Fatal编程技术网

在用OOP语言命名对象时,“;“地图”;及;转换;?

在用OOP语言命名对象时,“;“地图”;及;转换;?,oop,map,transformation,naming,conventions,Oop,Map,Transformation,Naming,Conventions,对我来说,命名是软件工程中的一个重要概念。出于这个原因,我非常喜欢设计模式,因为它为我(我认为是)常见的模式/对象提供了合适的名称 创建对象时,其目的是将一个对象转换为另一个对象,反之亦然,我通常使用名称“映射”: IDictionary\u userIdMap=new/。。。 公共类用户映射器 { UserModel ToModel(UserViewModelModel ViewModel){…} UserViewModelModel到ViewModelModel(UserModel模型){…

对我来说,命名是软件工程中的一个重要概念。出于这个原因,我非常喜欢设计模式,因为它为我(我认为是)常见的模式/对象提供了合适的名称

创建对象时,其目的是将一个对象转换为另一个对象,反之亦然,我通常使用名称“映射”:

IDictionary\u userIdMap=new/。。。
公共类用户映射器
{
UserModel ToModel(UserViewModelModel ViewModel){…}
UserViewModelModel到ViewModelModel(UserModel模型){…}
}
然而,最近我参加了一个项目,这种性质的对象被称为变形金刚,我明白为什么它们也可以被称为变形金刚

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

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

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

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


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

我同意你的解释。也许你想看一看范畴理论?或者等效地说,一个映射是查找的,而一个转换是执行的。@PaulHicks是的,当我说“有限的一组对象/值有一个清晰的关系”时,我暗示一个映射是“查找的”+1尽管为了清楚地说明“查找”和“执行”:)请注意,这与OOP或设计模式关系不大:这是所有CS中的惯用术语。(但在数学中,地图可能是无限的。)你们中有人对“转换”和“转换”有什么想法吗?我更喜欢这个术语,但我也很好奇随机程序员(即你们)是否比我对这个规范术语有先入为主的概念。@MartinBliss由于我有科学背景,我更喜欢使用术语“转换”,因为这是它通常的名称。
IDictionary<long, User> _userIdMap = new // ...

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