标签: separation-of-concerns

你如何判断视图或控制器中是否有东西?(Zend框架)

你如何判断视图或控制器中是否有东西?

以下是一些具体的例子:

  • Zend_Captcha:控制器是否生成验证码并将其传递给视图或视图是否生成它?
  • Zend_Alc:视图是否决定是应该向用户显示视图的一部分,还是根据可用的操作确定多个视图,并且控制器选择正确的视图进行显示?
  • Zend_Session:视图是根据会话数据跟踪谁正在查看它,还是由控制器解析并作为某种参数呈现给视图?

什么组件(模型,视图或控制器)的规则或指南应该在我可以查看它的地方写什么?我没有在Zend Framework网站上的文档中看到这一点.

php model-view-controller zend-framework separation-of-concerns

1
推荐指数
1
解决办法
560
查看次数

ASP.NET - 关注点分离

想象一下以下场景 - 我们有Page1包含控件A和控件B.

说控制A有一个按钮,单击此按钮我们希望控制B做出反应.但我们希望以抽象的方式做到这一点,即我们不能让Control B知道有关Control A的任何信息,反之亦然.

这样我们就可以孤立地开发这些控件,并通过单元测试来驱动它们.

现在,我以为我有解决方案,只想知道你们对它的看法.

在Control A的按钮上单击,我在Session上放了一条"消息",即Session ["MESSAGES"] ="ControlA_Click".

在Page1中,在Page_LoadComplete()上,我调用了ProcessMessages,如下所示:

            List<Message> messages = SessionMessages.GetMessageList(Page);
        foreach(Message m in messages)
        {
            //Get Controls
            ControlA controlA = FindControl("controlA") as ControlA;
            controlA .ProcessMessage(m);

            ControlB controlB = FindControl("controlB") as ControlB;
            controlB.ProcessMessage(m);
      }
Run Code Online (Sandbox Code Playgroud)

在ControlB的ProcessMessage()方法中,我们可以对ControlB感兴趣的消息做出反应,如下所示:

    if (m.MessageName == SessionMessages.C_MESSAGE_SEARCH)
{
    this.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)

对我而言,这似乎有效.它允许我们完全独立地开发这些控件,同时仍允许在抽象级别进行控制间通信.

我能想到的唯一的事情可能会带来这样轰然倒下的也许 ASP.NET生命周期有关页面和用户控件.我的方法是,在拥有页面上调用Page_LoadComplete()之前,应该在控件上处理所有事件.

思考?

asp.net unit-testing mocking separation-of-concerns isolation

1
推荐指数
1
解决办法
503
查看次数

单元测试具有许多私有方法的复杂类

我有一个类有一个公共方法和许多私有方法,这些方法根据传递给public方法的参数运行,所以我的代码看起来像:

public class SomeComplexClass
{
    IRepository _repository;

    public SomeComplexClass()
       this(new Repository())
    {
    }

    public SomeComplexClass(IRepository repository)
    {
        _repository = repository;
    }


    public List<int> SomeComplexCalcualation(int option)
    {
        var list = new List<int>();

        if (option == 1)
            list = CalculateOptionOne();
        else if (option == 2)
            list = CalculateOptionTwo();
        else if (option == 3)
            list = CalculateOptionThree();
        else if (option == 4)
            list = CalculateOptionFour();
        else if (option == 5)
            list = CalculateOptionFive();

        return list;
    }

    private List<int> CalculateOptionOne()
    {
        // Some calculation …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing dependency-injection mocking separation-of-concerns

1
推荐指数
1
解决办法
796
查看次数

从控制器(表示层)中映射域实体是否正确?

我在Visual Studio 2015中有一个解决方案,我将DDD层分离为项目.当我需要将表示层(MVC 5)中的数据发送到应用程序层(类库)时,我通常使用:

申请服务

public interface IFooAppService
{
    void AddNew(string name, DateTime birthday);
}
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpPost]
public JsonResult AddNew(FooViewModel viewModel)
{
    FooAppService.AddNew(viewModel.Name, viewModel.birthday);
}
Run Code Online (Sandbox Code Playgroud)

当我有一个具有许多属性和子实体的域实体类时,应用程序服务方法签名变得太长.考虑到DDD和关注点分离,在这种情况下,从MVC控制器直接将FooViewModel类映射到Foo域实体是否正确?这样的实施将是:

申请服务

public interface IFooAppService
{
    void AddNew(Foo foo);
}
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpPost]
public JsonResult AddNew(FooViewModel viewModel)
{
    Foo foo = FooMapper.Map(viewModel);
    FooAppService.AddNew(Foo);
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc domain-driven-design separation-of-concerns

1
推荐指数
1
解决办法
167
查看次数

我何时将我的特定数据访问逻辑放在我的模型中的MVC中?

开箱即用,当您使用Entity Framework在MVC中创建控制器时,您将获得基本的Get语句,将数据拉入控制器以显示在视图中.例如:

    public ActionResult Index()
    {
        var capsules = db.capsules.ToList();
        return View(capsules);
    }
Run Code Online (Sandbox Code Playgroud)

我理解它的方式,编写MVC代码的最佳方法是将您的数据特定逻辑放在Models项目中.然后,控制器在您拥有逻辑的任何模型类中调用该方法,检索数据,然后将其发送到视图.上面的例子只是简单地检索一个非常基本的胶囊列表.我没有创建一个特殊的"CapsuleModelContext"类来处理胶囊检索操作,因为它是在我的edmx文件中处理的.

我想这一切都归结为我是否应该在Controller或Model的上下文类中实例化dbContext的问题.开箱即用,dbContext在Controller中实例化.这里有关于最佳实践的建议吗?

model-view-controller asp.net-mvc entity-framework separation-of-concerns

0
推荐指数
1
解决办法
264
查看次数

Django - 将 html 文件划分为组件

我刚刚熟悉 Django 模板继承,但这在这种情况下对我没有帮助。我有以下模板结构:

-templates
   -home
      -base.html
      -right_menu.html
      -top_menu.html
      -left_bottom_menu.html
Run Code Online (Sandbox Code Playgroud)

基本.html:

<!DOCTYPE html>    
{% load static %}    
<html>
    <head>
        <title>Hot or Not</title>            
    </head>    
    <body>
        <div id="mainMenuPanel" class="topMenu">
            {% block top_menu %}{% endblock %}
        </div> 
        <div class="leftPanel">
            <div class="leftBottomMenu">
                {% block left_bottom_menu %}{% endblock %}
            </div>
        </div>        
        <div id="divMenu" class="rightPanel">
            {% block right_menu %}{% endblock %}            
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我有 3 个菜单 - 顶部菜单、左下菜单、右侧菜单。但是随着 base.html 的加载,我也想加载这些菜单。与模板继承类似,我想将这些菜单保留在其他文件中。然而,模板继承需要重定向到这些 html 文件(例如重定向到right_menu.html),并且只会加载它们的块(它就像其他 html 文件的母版页)。我怎样才能在 Django 中实现这种分离?

html django separation-of-concerns

0
推荐指数
1
解决办法
1556
查看次数