【发布时间】:2018-07-30 03:43:41
【问题描述】:
我仍然只是一个中等水平的程序员。我查看了各种 DTO 帖子,尤其是 SO Post。我也知道 SO Post 中提到的自动映射器,但我还没有开始将自动映射器集成到我的代码中。但我的问题是关于 哪里 DTO 应该位于 如果 您正在编写它。 SO Post 的第三个答案似乎暗示了我在下面显示的内容。
我编写了如下所示的简单类结构,将 DTO 合并到类中。 DTO 在域和存储层之间传输数据。自动调用嵌套类 DTO。另外还有互补的 DTO。
Public Class SqlTaskList
Inherits TaskList
<Key> Public Overrides Property TaskListID As Integer
Friend Function SqlToDomainTaskListModel() As TaskList
Dim theDomainTaskList As New TaskList
With theDomainTaskList
.TaskListID = TaskListID
.TaskListOwner = TaskListOwner
For Each singleSqlTask In Tasks
Dim theDomainTaskItem As New TaskItem
theDomainTaskItem = SqlTaskItem.SqlToDomainTaskItemModel(singleSqlTask)
theDomainTaskList.Tasks.Add(theDomainTaskItem)
Next
End With
Return theDomainTaskList
End Function
End Class
Public Class SqlTaskItem
Inherits TaskItem
<Key> Public Overrides Property TaskId As Integer
Shared Function SqlToDomainTaskItemModel(theSqlTaskItem) As TaskItem
Dim thedomainTaskItem As New TaskItem
With thedomainTaskItem
.TaskId = theSqlTaskItem.TaskId
.TaskName = theSqlTaskItem.TaskName
.TaskDesc = theSqlTaskItem.TaskDesc
.TaskOwner = theSqlTaskItem.TaskOwner
End With
Return thedomainTaskItem
End Function
End Class
它工作得很好,但我开始想知道为什么我应该在课堂上设置 DTO。我之所以这样做,是因为我在学习如何解决此问题时查看过的几个教程/示例中已经看到这样做了。
我不太擅长本能地思考正在使用的内存,但我突然想到,每次实例化上述类时,它们不仅占用数据所需的数据空间,而且还会加载DTO 方法。将 DTO 方法放在类之外会更好吗,这样它们只在需要时才被实例化?由于这可能会添加一些代码,因此似乎可能需要权衡取舍,但我不确定。是否有一种我应该使用的机制,无论类被实例化多少次,它只会加载一次 DTO?上面的类相对无关紧要,但更大的类似乎会产生更大的影响,是吗?
如果这是一个明显的问题,我深表歉意,但我想帮助理解这里的问题。
在初始帖子后添加了说明: 我的具体问题是,从内存使用(而不是文件)的角度来看,将 DTO 定位在它专门转换的类中是否更好,或者 DTO 是否应该位于单独的类中?尽管我在上面提到了权衡,但我不认为这是一个意见问题。
我在问当 DTO 在类内时,实例化时使用的内存是否明显更高?我不认为这是一种观点——我试图询问情况的事实。内存使用率高不高?
当 DTO 可用作同一类的方法时,在代码的其他地方调用 DTO 肯定更方便。但是,如果 DTO 属于自己的类别,那么这种好处是否会伴随着消耗更多内存的成本呢?我试图了解在该类的简单应用程序中运行良好的内容是否会在应用程序扩展时变成活动内存问题。
我很难想象在使用存储层执行期间发生了什么。上面的类是否只会在存储操作期间被实例化,所以不可能同时有多个实例化,从而得出 DTO 无关紧要的结论?或者在 Web 应用程序的情况下,是否有大量的同时实例化,这意味着 DTO 可能会被实例化多次,从而不必要地占用内存空间?
我担心,在以简单的方式简单地对存储层进行编码时,我会在不知不觉中让自己面临下游的内存使用问题。
【问题讨论】:
-
使用嵌套类与顶级类完全不应该影响内存使用。