MVC模型对象,域对象和DTO之间有什么区别?
我的理解是:
MVC模型对象:
为相应视图显示的数据建模.它可能不直接映射到域对象,即可能包括来自一个或多个域对象的数据.
域对象:
用于对问题域中的现实世界对象进行建模的对象,如预留,客户,订单等.用于保存数据.
DTO(数据传输对象):
当层处于单独的进程中时,用于在层之间传输数据的对象,例如从DB到客户端应用程序.在获取与多个域对象相对应的数据时,允许跨线的单个事务而不是多个调用.DTO仅包含数据和访问器方法,并且不存在逻辑.该数据用于特定的DB事务,因此它可以或可以不直接映射到域对象,因为它可以包括来自一个或多个域对象的数据.
所以,问题:
以上理解是否正确?我错过了一些关键点吗?
是否有任何理由不使用Domain对象作为MVC模型,假设Model对象不需要额外的业务逻辑?
是否有任何理由不使用DTO作为MVC模型,假设Model对象不需要额外的业务逻辑?
我有一个data.frame
数字和因子变量组成,如下所示.
testFrame <- data.frame(First=sample(1:10, 20, replace=T),
Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))
Run Code Online (Sandbox Code Playgroud)
我想构建一个matrix
为该因子分配虚拟变量并单独保留数值变量.
model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,在运行时会将lm
每个因子的一个级别作为参考级别.但是,我想为matrix
所有因素的每个级别构建一个带有虚拟/指示变量的变量.我正在建立这个矩阵,glmnet
所以我不担心多重共线性.
有没有办法model.matrix
为每个级别的因子创建假人?
我的一些域对象包含日期范围作为一对开始和结束日期属性:
public class Period {
public DateTime EffectiveDate { get; set; }
public DateTime ThroughDate { get; set; }
}
public class Timeline {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我发现自己有很多这样的事情:
abstract public int Foo(DateTime startDate, DateTime endDate);
abstract public decimal Bar(DateTime startDate, DateTime endDate);
abstract public ICollection<C5.Rec<DateTime, DateTime>> FooBar(DateTime startDate, DateTime endDate);
Run Code Online (Sandbox Code Playgroud)
最后一个让我想知道......我应该实现一个DateRange类吗?我不知道BCL中有一个.
根据我的经验,使对象层次结构更深入往往使事情复杂化.这些对象确实被发送到ReportViewer控件显示的RDLC报告,但这是次要的.我会将视图弯曲到模型而不是相反.但是,我们并不依赖于属性名称,并愿意与以下内容妥协:
public class DateRange {
public DateTime StartDate { get; set; }
public DateTime EndDate { get; …
Run Code Online (Sandbox Code Playgroud) class Post < ActiveRecord::Base
end
post = Post.new
Run Code Online (Sandbox Code Playgroud)
如何判断'post'是否是一个未从数据库中提取的新模型?
我想在其中存储一些额外的信息,自动创建,ManyToMany join-table.我怎么在Django那样做?
在我的情况下,我有两个表:"员工"和"项目".我想要存储的是每个员工每个项目每小时工作收到多少,因为这些值不相同.那么,我该怎么做?
我遇到的是,而不是方法"ManyToManyField",显式创建第三个类/表来存储这些新信息,并使用"ForeignKey"方法设置与"Employees"和"Projects"的关系.我很确定它会起作用,但这是最好的方法吗?
将验证应用于MVC中的模型,并希望使用Regex进行验证.
希望验证我的模型上的ID在提交时大于0.
我有以下Django模型:
class Make:
name = models.CharField(max_length=200)
class MakeContent:
make = models.ForeignKey(Make)
published = models.BooleanField()
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以(不直接编写SQL)生成一个包含所有Make
s和每个相关MakeContent
s的查询集published = True
.
我想要的是创建一个模型,以动态的方式使用has_many关联与另一个连接,没有像这样的外键:
has_many :faixas_aliquotas, :class_name => 'Fiscal::FaixaAliquota',
:conditions => ["regra_fiscal = ?", ( lambda { return self.regra_fiscal } ) ]
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
: SELECT * FROM "fis_faixa_aliquota" WHERE ("fis_faixa_aliquota".situacao_fiscal_id = 1
AND (regra_fiscal = E'--- !ruby/object:Proc {}'))
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我不确定如何在模型的保存方法中正确引发验证错误,并向用户发回明确的消息.
基本上我想知道"if"的每个部分应该如何结束,我想要引发错误的部分和它实际保存的部分:
def save(self, *args, **kwargs):
if not good_enough_to_be_saved:
raise ValidationError
else:
super(Model, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
然后我想知道该怎么做才能发送一个验证错误,该错误确切地告诉用户错误就像Django自动返回的那样,例如,如果某个值不唯一.我正在使用(ModelForm)并从模型中调整所有内容.
所以,我在MyApp文件夹中有一个models.py文件:
from django.db import models
class Model_One(models.Model):
...
class Model_Two(models.Model):
...
...
Run Code Online (Sandbox Code Playgroud)
它可以是大约10-15个班级. 如何找到MyApp中的所有模型并获取其名称?
由于模型不可迭代,我不知道这是否可行.
model ×10
django ×4
.net ×1
architecture ×1
database ×1
date-range ×1
dto ×1
filter ×1
indicator ×1
many-to-many ×1
matrix ×1
python ×1
r ×1
regex ×1
ruby ×1
tuples ×1
validation ×1