在软件体系结构中,响应对象和DTO有什么区别?假设我要获取目录中的产品列表。
如果这是ProductDTO,则产品响应类有何不同?产品响应通常只是带有日期时间,错误日志或guid的包装,还是主要区别是什么?如果没有确切或多个答案,则想听听业内的首要原因。
public class FormCoachingAdapter extends BaseAdapter<FormCoachingAdapter.FormHolder> {
private Context context;
private List<DataQuestion> questionList;
private List<DataAnswers> answersList;
public FormCoachingAdapter(Context context, List<DataQuestion> questionList, List<DataAnswers> answersList){
this.context = context;
this.questionList = questionList;
this.answersList = answersList;
}
class FormHolder extends RecyclerView.ViewHolder {
@BindView(R.id.rg_common)
RadioGroup rgCommon;
@BindView(R.id.rb_yes)
RadioButton rbYes;
@BindView(R.id.rb_no)
RadioButton rbNo;
@BindView(R.id.tv_descriptions)
TextView tvDescriptions;
FormHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
@NonNull
@Override
public FormHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context)
.inflate(R.layout.row_common_checklist_two, parent, false);
return new FormHolder(itemView);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull FormHolder holder, int position) {
DataQuestion question = questionList.get(position);
DataAnswers answers = new DataAnswers();
Gson gson = new Gson();
System.out.println("DEVELOPER HASIL DATA : " + gson.toJson(answersList));
answers.setQuestionId(BigInteger.valueOf(Long.valueOf(question.getId())));
/*answers.setAnswer1("");
answers.setAnswer2("");*/
//Handle selection state
if(question.isChecked){
// already selected
if(answersList.size() != 0){
for (DataAnswers dataAnswers : answersList){
if (dataAnswers.getAnswer1().equals("Y")) {
holder.rbYes.setChecked(true);
} else {
holder.rbNo.setChecked(true);
}
}
}else{
// not selected yet(default)
}
holder.rgCommon.setOnCheckedChangeListener((group, checkedId) -> {
RadioButton rb = holder.itemView.findViewById(checkedId);
//Handling selection state changed
question.isChecked(true);
for (int i=0; i<answersList.size(); i++) {
if (answersList.get(i).getQuestionId().equals(answers.getQuestionId())) {
answersList.remove(i);
break;
}
}
switch (rb.getId()) {
case R.id.rb_yes:
answers.setQuestionId(BigInteger.valueOf(Long.valueOf(question.getId())));
answers.setAnswer1("Y");
answers.setAnswer2("");
answersList.add(answers);
break;
case R.id.rb_no:
answers.setQuestionId(BigInteger.valueOf(Long.valueOf(question.getId())));
answers.setAnswer1("N");
answers.setAnswer2("");
answersList.add(answers);
break;
}
});
holder.tvDescriptions.setText((position + 1) + ". " + question.getQuestion());
}
@Override
public void onViewAttachedToWindow(@NonNull FormHolder holder) {
super.onViewAttachedToWindow(holder);
}
public int getItemViewType(int position) {
return position;
}
@Override
public int getItemCount() {
return questionList.size();
}
}
我尝试使用谷歌搜索这些答案,但没有针对该问题的具体答案,
Data Objects for each layer(DTO vs Entity vs Response objects)
更新:
尝试验证答案。似乎Rahul的答案是回答Domain对象和DTO之间的区别。 Thought Response是DTO的包装,不确定是否为真
http://themoderndeveloper.com/the-modern-developer/requesting-a-response/
现在发布在这里:
答案 0 :(得分:0)
据我所见,Response对象可以在DTO的顶部包含一个Status字段,指示请求是否成功;否则,为什么失败了。
但是我不太确定这是一个已记录的规范。
答案 1 :(得分:0)
DTO (Data Transfer Object)
是一个对象,它定义如何通过网络或应用程序发送数据。另一方面,Response Object
通常保存来自DTO或WebApi's or Data Access
的响应数据或对客户端的任何其他响应。
Response Object
通常包括特定model or entity or DTO
对象的全部/很少属性,而该特定DTO
对象通常是public class EmployeeResponseObject
{
public int Id { get; set; }
public string Name { get; set; }
public string Designation { get; set; }
}
对象的子集。请参见下面的示例。
员工响应对象:
public class EmployeeDTO
{
public int Id { get; set; }
public string Name { get; set; }
public string Designation { get; set; }
public decimal Salary { get; set; }
public DateTime JoiningDate { get; set; }
public decimal Tax { get; set; }
}
员工DTO:
EmployeeResponseObject
现在您可以在这里看到。 EmployeeDTO
是EmployeeResponseObject
的子集,这意味着EmployeeDTO
的属性少于EmployeeResponseObject
。在少数情况下,我们不必将所有信息传递给最终客户。因此,我们将使用EmployeeDTO
从LINQ
获取必需的属性。
您可以使用Response Object
将数据从DTO
投射到[ResponseType(typeof(EmployeeResponseObject))]
public EmployeeResponseObject GetEmployee()
{
var employee = from e in dbContext.EmployeeDTO
select new EmployeeResponseObject()
{
Id = e.Id,
Name = e.Name,
Designation = e.Designation
};
return employee;
}
。
EmployeeDTO
如果仅使用presentation layer/View, Webforms or ConsoleApp
来将信息传递给presentation layer/View
,则您的domain layer
将与您的DTO Objects
紧密耦合。对presentation layer or controllers
所做的任何更改都要求您更改DTO
,但这不是一个好方法。
有时Response Objects
和DTO
与为什么使用单独的对象完全相同。
这看起来可能是不必要的代码重复,但请考虑一下,当您的项目变得特别大时,在一个大型团队中,许多人在不同的应用程序层一起工作。通过良好的编程习惯,在这里使用separate Response object
和Presentation layer/View
更有意义。当您跳过使用domain layer
时,ResponseObject/ViewModelObject
和```{r this_label}
library(knitr)
print(opts_current$get()$label)
```
将紧密耦合。