Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/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
Asp.net mvc 在asp.net mvc中组织真实世界的应用程序代码时有些迷失_Asp.net Mvc_Code Organization - Fatal编程技术网

Asp.net mvc 在asp.net mvc中组织真实世界的应用程序代码时有些迷失

Asp.net mvc 在asp.net mvc中组织真实世界的应用程序代码时有些迷失,asp.net-mvc,code-organization,Asp.net Mvc,Code Organization,我有下面的真实场景,为了这个例子的缘故有些简化 我有一个对象,我们称之为电影,它由几个属性组成,比如 发布日期 演员(阵列) 体裁 评级 我需要有一个可以输入新电影的表单,表单上包含以下元素: 日期日历 演员下拉列表 用体裁搜索列表 星光场 使用asp.net mvc组织代码的清晰一致的方法是什么,请概述在哪里 数据访问逻辑 业务逻辑(验证等) 我想在这里使用ViewModel概念 到目前为止我有 电影模型 MovieViewModel视图模型 iMovie存储库接口 但我不清楚

我有下面的真实场景,为了这个例子的缘故有些简化

我有一个对象,我们称之为电影,它由几个属性组成,比如

  • 发布日期
  • 演员(阵列)
  • 体裁
  • 评级
我需要有一个可以输入新电影的表单,表单上包含以下元素:

  • 日期日历
  • 演员下拉列表
  • 用体裁搜索列表
  • 星光场
使用asp.net mvc组织代码的清晰一致的方法是什么,请概述在哪里

  • 数据访问逻辑
  • 业务逻辑(验证等)
  • 我想在这里使用ViewModel概念
到目前为止我有

  • 电影模型
  • MovieViewModel视图模型
  • iMovie存储库接口
但我不清楚演员/体裁数组如何融入其中,我从哪里获取数据……它是否进入IMovieRepository界面?我是否为其创建了另一个界面,换句话说,我是否为ViewModel创建了一个界面?我是否也为获取流派创建了一个接口? 另一个问题: 如何使用ViewModels?我需要更改应用程序设置中的任何内容吗

控制器动作的主体中有类似View()的内容……如何将ViewModel传递到那里?我需要吗

总而言之,我只想要一个简单的示例,说明如何实现上述场景


我是MVC新手,正在努力确保我的代码组织良好。

我记得Mike Cohn关于敏捷的一句好话,“最佳实践并不存在。”

因此,您应该始终不断改进和重构,不仅针对代码,还针对设计、体系结构、方法等。要做到这一点,您需要以下几点:

var repository = new FakeRepository<CustomerVeiwModel>();
var  customer = repository.GetById(1);
  • 将可维护性作为一项无功能的要求,以满足所有工作的需要
  • BDD(行为驱动开发)
  • TDD(测试驱动设计)
  • TDD(测试驱动开发)
  • 具有适当代码覆盖率的单元测试
  • 自动化构建、部署和测试(所有重复活动的完全自动化)
我知道这是一个有点长的介绍,但有必要了解我为什么我会建议你做我的方法如下

public ActionResult List(CustomerVeiwModel customerVeiwModel)
    {    
       var repository = new FakeRepository<CustomerVeiwModel >();
       repository.Save(customerVeiwModel);
我在MVC项目中的默认方法如下

public ActionResult List(CustomerVeiwModel customerVeiwModel)
    {    
       var repository = new FakeRepository<CustomerVeiwModel >();
       repository.Save(customerVeiwModel);
  • 通过使用展开使用映射层映射的ViewModel 映射库
  • 域模型考虑DDD指令
  • 将控制器作为服务使用的服务层 业务逻辑
  • 服务层和工作单元使用的存储库
但正如我告诉你们的,最佳实践并不存在,所以我将使用BDD和TDD开始我的开发,为了实现这一点,我创建了一个框架“”,并在CodePlex上发布,这个框架将使我能够完成并完成我的视图,并使其真正工作,而无需任何下划线层的设计或代码

在该特性与涵盖其大部分行为的所有单元测试一起工作之后,我将开始重构整个系统

  • 视图模型
  • 映射
  • 服务
  • 存储库
  • 等等
对于每个重构,我都会运行所有需要的单元测试,以确定我的重构是否破坏了我的代码,或者破坏了应用程序公认的和已知的行为,如果发生这种情况,我会修复任何破坏

例如,为了保存一个客户并检索它,我将在每个操作方法中只使用一行代码,如下所示

public ActionResult List(CustomerVeiwModel customerVeiwModel)
    {    
       var repository = new FakeRepository<CustomerVeiwModel >();
       repository.Save(customerVeiwModel);
公共操作结果列表(CustomerWebModel CustomerWebModel) { var repository=new FakeRepository(); repository.Save(customerVeiwModel); 要检索客户,我只需要编写以下代码:

var repository = new FakeRepository<CustomerVeiwModel>();
var  customer = repository.GetById(1);
var repository=newfakerepository();
var customer=repository.GetById(1);
因此,我总是在2分之后决定ViewModel、存储库、体系结构等

  • 功能完成并作为客户或业务专家工作 期望
  • 我有涵盖所有特性行为和响应的单元测试
这将使我意识到如何进行设计、开发架构,并使我相信我的代码确实能够以高质量和客户期望的方式工作

最后,只有一个词,我总是不断地重构和重构,每一个新的特性、修改、问题或问题发生在我身上,它可能会导致新的架构概念或设计决策,这将改变整个应用程序,我随时准备着


顺便说一下,您可以在CodePlex上下载使用我的方法表单的MVC3项目,您将发现名为“TryFakeMVC3”的项目

你的GUI似乎与你的业务逻辑相矛盾。你说一部电影有多个演员,但你在GUI中提供了一个下拉列表,显然可以选择一个演员。这表示收视率。似乎很奇怪。你是说一个多选下拉列表吗?不,当选择一个演员时,它会自动添加并显示出来显示在下拉列表上方的屏幕上,旁边有“x”(用于删除)。用户可以通过这种方式选择多个操作。我很可能会使用jquery ajax进行此操作。用户只能对电影进行一次评分-我将编辑我的问题。请看。它为asp.net mvc应用程序提供了可靠的体系结构(使用最佳实践)。