小编Mod*_*ika的帖子

AngularJS仅适用于单页面应用程序(SPA)吗?

我们正在寻找构建我们正在创建的应用程序前端的选项,并且正在尝试评估一个对我们有用的工具,并为我们提供最佳的平台.

这是一个Node.js项目.我们最初的计划是使用Express并沿着这条路走下去,但我们决定在开始这个阶段之前,最好回顾一下那里的情况.我们的应用程序有几个我们认为不适合单页模型的领域,因为它们从应用程序的角度来看是相关的,而不是从视图中看.

我们已经看到了一些可以用来构建客户端的框架,比如Backbone.js,Meteor等,还有AngularJS.

这可能是一个相当明显的问题,但是如果AngularJS纯粹用于单页面应用程序,或者它可以用于Express等多页面应用程序,我们似乎无法破译.


更新2013年7月17日 为了让人们保持在循环中,我将在整个过程中更新这个问题.我们现在要一起构建所有内容,我们将看到它的表现如何.我们已经联系了一些比我们更有资格使用AngularJS的人,并且提出了关于拆分共享上下文的更大应用程序的问题,但是在单个页面上工作可能太大.

我们的共识是,我们可以提供多个静态页面并创建仅与这些页面一起使用的AngularJS应用程序,有效地创建SPA集合并使用标准链接将这些应用程序链接在一起.现在我们的用例非常具体,因为我们的解决方案有几个应用程序,正如我所说,我们将首先尝试单个代码库并从那里进行优化.

更新2016年6月18日该项目陷入悬崖,所以我们从来没有完成过多的工作.我们最近再次提起它,但不再使用角度而是使用React.我们仍在使用上一次更新中概述的体系结构,我们使用快速和自包含应用程序,因此,例如,我们/chat在快递中有一条路线用于提供我们的React聊天应用程序,我们有另一条路线/projects来提供项目应用程序和等等.我们有点看待它的方式是每个应用程序在其功能集方面是一个聚合根,它需要能够独立,因为它本身被视为一个应用程序.从技术上讲,所有的信息都在那里,它只是基本的表达,以及你想要使用的客户端应用程序构建良好的任何风格.

javascript node.js angularjs

200
推荐指数
3
解决办法
6万
查看次数

如果您打扰,人们如何使用Entity Framework 6进行单元测试?

我刚刚开始使用单元测试和TDD.我之前已经涉足过,但现在我决心将它添加到我的工作流程并编写更好的软件.

我昨天问了一个问题,包括这个问题,但这似乎是一个问题.我坐下来开始实现一个服务类,我将用它来从控制器中抽象出业务逻辑,并使用EF6映射到特定的模型和数据交互.

问题是我已经阻止了自己,因为我不想在存储库中抽象EF(它仍然可以在服务之外用于特定查询等)并且想测试我的服务(将使用EF Context) .

在这里我想是问题,有没有意义这样做?如果是这样的话,人们如何在野外做到这一点,因为IQueryable引起的漏洞抽象以及Ladislav Mrnka关于单元测试主题的许多重要帖子都不是直截了当的,因为Linq提供商在处理内存时存在差异与特定数据库相关的实现.

我想测试的代码看起来很简单.(这只是虚拟代码,试图理解我在做什么,我想用TDD驱动创建)

上下文

public interface IContext
{
    IDbSet<Product> Products { get; set; }
    IDbSet<Category> Categories { get; set; }
    int SaveChanges();
}

public class DataContext : DbContext, IContext
{
    public IDbSet<Product> Products { get; set; }
    public IDbSet<Category> Categories { get; set; }

    public DataContext(string connectionString)
                : base(connectionString)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

服务

public class ProductService : IProductService
{
    private IContext _context;

    public ProductService(IContext dbContext)
    {
        _context = dbContext;
    }

    public IEnumerable<Product> GetAll() …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing entity-framework entity-framework-6

164
推荐指数
8
解决办法
9万
查看次数

将自定义标头添加到Web API中的所有响应

简单的问题,我相信它有一个简单的答案,但我找不到它.

我正在使用WebAPI,我想向所有响应发回自定义标头(开发人员请求的服务器日期/时间用于同步目的).

我目前正在努力寻找一个明确的例子,说明在一个地方(通过global.asax或其他中心位置)我可以为所有响应显示自定义标题.


接受了答案,这是我的过滤器(几乎相同)和我添加到WebApi配置的Register功能的行.

注意:DateTime的东西是NodaTime,没有真正的理由只是有兴趣看它.

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        actionExecutedContext.Response.Content.Headers.Add("ServerTime", Instant.FromDateTimeUtc(DateTime.Now.ToUniversalTime()).ToString());
    }
Run Code Online (Sandbox Code Playgroud)

配置行:

config.Filters.Add(new ServerTimeHeaderFilter());
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-web-api

55
推荐指数
4
解决办法
7万
查看次数

Node.js的同步代码与异步代码

我们正在使用node,主要用于内部项目并了解使用该技术的最佳方式.

不是来自特定的异步背景,学习曲线可能是一个挑战,但我们已经习惯了框架并学习了这个过程.

让我们两极化的一件事是,使用同步代码与异步代码的最佳时间是.我们当前正在使用规则,如果有任何事情与IO交互,那么它必须通过回调或事件发射器(即给定的)是异步的,但是其他不以任何方式使用IO的项可以构造为同步函数(这还取决于函数本身的重量以及它实际上是如何阻塞的)但这是使用Node.js时最好的方法吗?

例如,我们正在创建一个Hal + JSON构建器,它当前存在于我们的代码库中.它是同步的,因为它所做的只是创建一些相当小的对象文字,仅此而已,没有外部依赖,当然也没有IO交互.

我们的方法是否适合采取?

javascript node.js

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

试图在javascript不良实践中模仿接口/抽象类

我在Node.js中编写了一些代码,这些代码使用策略模式进行了更好的结构化.来自.Net我会创建其余基于的接口并从那里移动,在JavaScript中这不是那么明确.

我理解作为一种原型语言JavaScript没有接口继承的概念,所以我不确定我做了什么是有气味,因为我似乎无法找到引用,除了一篇试图推断界面的博客文章通过使用一个基本抽象类来强制继承类实现该函数(因为它抛出).

我的基类

QueryStrategy = function () {

};

QueryStrategy.prototype.create = function(){
throw new Error("Not Implemented");
}

module.exports = QueryStrategy;
Run Code Online (Sandbox Code Playgroud)

实施1

var util = require('util');
var QueryStrategy = require('./queryStrategy');

SelectQueryStrategy = function (query) {
    this.parameters = query.parameters || [];
    this.entity = query.entity || '';
};

util.inherits(SelectQueryStrategy, QueryStrategy);

SelectQueryStrategy.prototype.create = function () {
    var self = this,
        params = self.parameters,
        paramList = self.parameters.length >= 1 ? '' : '*';

    for (var i = 0; i < params.length; i++) {
        var suffix …
Run Code Online (Sandbox Code Playgroud)

javascript oop node.js

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

使用Node.js中的Sinon.js模拟Postgres进行单元测试

我无法理解如何使用sinon模拟我正在测试的模块所需的postgres调用,或者甚至可能.

我不是试图测试postgres模块本身,只是我的对象以确保它按预期工作,并且它正在调用它应该在此实例中调用的内容.

我想问题是需要设置节点,因为我的模块需要postgres模块来命中数据库,但在这里我不想运行集成测试我只是想确保我的代码是孤立的,并没有真正关心数据库正在做什么,我将把它留给我的集成测试.

我看到有些人设置他们的函数有一个可选参数来发送mock/stub/fake到函数,测试它的存在,如果它在那里使用它在所需的模块上,但这对我来说似乎是一种气味(我是节点的新人,所以可能不是这样).

我宁愿嘲笑这个,而不是试图劫持要求,如果可能的话.

一些代码(请注意这不是真正的代码,因为我正在运行TDD并且函数没有做任何事情,函数名称是真的)

测试设置

describe('#execute', function () {
it('should return data rows when executing a select', function(){
 //Not sure what to do here
});
});
Run Code Online (Sandbox Code Playgroud)

样本功能

PostgresqlProvider.prototype.execute = function (query, cb) {
var self = this;

if (self.connection === "")
    cb(new Error('Connection can not be empty, set Connection using Init function'));

if (query === null)
    cb(new Error('Invalid Query Object - Query Object is Null'))

if (!query.buildCommand)
    cb(new Error("Invalid Query Object"));

//Valid connection and query
};
Run Code Online (Sandbox Code Playgroud)

像这样环绕postgres模块可能看起来有点滑稽,但是有一些设计,因为这个应用程序将有几个"提供者",我想为它们公开相同的API,所以我可以互换使用它们. …

javascript node.js sinon

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

是否使用存储库抽象而不是实体框架良好实践?

我即将开始一个新项目,它将使用实体框架(EF)作为ORM来链接SQL Server.我一直在做大量的阅读,以了解在抽象方面使用EF的最佳方法,并最终使我的代码可测试.

问题是我做的阅读越多,我就越困惑.

我认为这是一个很好的方式:

我打算沿着存储库路线走下去,制作它们,这样它们很容易通过接口注入,并且易于模拟用于测试目的,从我似乎发现的很多例子中,有很多人发誓这种方法.对于与EF交互的存储库部分,我只是要进行集成测试,因为我的Repos中没有业务逻辑,我会将其转移到服务/控制器类来处理它.

有人说存储库模式是一种无根据的抽象

http://ayende.com/blog/3955/repository-is-the-new-singleton

还有其他链接,但我不想用太多的问题充斥这个问题

我得到了这个,我明白EF和它的实现本质上是一个抽象,但对我来说它似乎是一个具体的(它击中了应用程序范围之外的东西......数据库)对我来说问题是它推动了测试问题(至少在初始架构中),我可能会在我的服务中与数据上下文和工作单元进行交互,但感觉就像是在混合数据访问登录与业务逻辑等级然后我怎么做单元测试呢?

我似乎已经阅读了很多,以至于我现在没有明确的方向和不可避免的编码器块已经开始.我正在努力寻找一种干净的方法,我可以测试.

更新 - 解决方案我将开始

我走了一条与simon给出的答案略有不同的路径,但感谢我读过的一篇文章,但他再次提交,所以我又重新审视了.首先我使用Code First,因为我有一个现有的数据库,并且出于某种原因不喜欢设计器工具.我创建了一些简单的POCO对象和一些映射,为了简单起见,我只是展示一个POCO/Mapping,什么不是.

POCO

public abstract class BaseEntity<T>
{
    [Key]
    public T Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedOn { get; set; }
}    

public class Project : BaseEntity<int>
{
    public virtual ICollection<Site> Sites { get; set; }
    public bool Active { get; set; }
}    
Run Code Online (Sandbox Code Playgroud)

工作单元接口

public interface IUnitOfWork
{
    IDbSet<Project> Projects { get; }

    void Commit();
}
Run Code Online (Sandbox Code Playgroud)

上下文 …

.net entity-framework

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

从数组中删除JSON对象会创建“未定义”对象

我在JSON和数组方面遇到一些问题。我一直在弄乱JSON一段时间,并试图通过重构旧的实现在生产中使用一些JSON。我所拥有的是两个隐藏的文本字段,其中一个商店ID的格式为[1] [2] [3]等,另一个名称为[name1] [name2] [name3],所以我认为这是一个很好的练习,以了解更多信息JSON并对其进行重构,并使用更具可读性的对象表示法。

无论如何我离题。我遇到的问题很有趣,我发现了如何将JSON“推”入数组,但是问题出在我的delete方法中。当我从数组中删除对象时,逗号仍然存在,创建“未定义”对象。我做错了吗,还有更好的方法吗?

向数组添加了2个项目(一切正常)

[{id:"1", name:"Test (ID: 1)", status:"new"}, {id:"2", name:"Test 2 (ID: 2)", status:"new"}]
Run Code Online (Sandbox Code Playgroud)

从数组中删除了1个项目(保留了逗号)

[{id:"1", name:"Test (ID: 1)", status:"new"}, ,]
Run Code Online (Sandbox Code Playgroud)

将另一项添加回数组,逗号现在导致“未定义”对象

[{id:"1", name:"Test (ID: 1)", status:"new"}, , {id:"2", name:"Test 2 (ID: 2)", status:"new"}]
Run Code Online (Sandbox Code Playgroud)

这是我的删除功能

    function removeFromList(Id) {
    var txtIDs = $("#<%= selected.ClientID %>");
    var data = eval(txtIDs.val());

    for (var i = 0; i < data.length; i++) {
        alert(typeof (data[i]));
        if (typeof(data[i]) != 'undefined') {
            if (data[i].id == Id)
                delete data[i]; // alert(data[i].name); //  
        }
    } …
Run Code Online (Sandbox Code Playgroud)

javascript json

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

使用自动混合填充夹具的集合属性

我刚刚开始使用AutoFixture,而且我已经掌握了基础知识(从我可以看到的还有更多内容)但我有一个问题,我不是100%确定这样的事情的最佳做法是什么.

我正在测试一个控制器,而部分进程是动作可以返回两个视图中的一个.

  • 如果某个类别有子项 - 显示类别列表视图
  • 如果某个类别没有子项显示产品列表视图

所以我正在考虑对该行为进行一些测试,但返回的夹具数据会有所不同.一个会返回一个0的计数,另一个会返回一个更大的计数,然后是零,所以我希望夹具帮助我.

我一直在寻找,也许我必须创建某种类型的自定义,但希望基本的API可以帮助我.我试过这个:

var category = _fixture.Build<Category>()
    .Do(x => x.SubCategories = _fixture.CreateMany<Category>(3).ToList())
    .Create();

_fakeCategoryService
    .Setup(x => x.GetById(id))
    .Returns(category);
Run Code Online (Sandbox Code Playgroud)

这编译和测试运行(和失败),但子类别总是有0,所以我认为我在do中调用Create Many是完全错误的(它看起来有点不对,但我仍然不确定它应该是什么替换为).

更新:应该更好地阅读备忘单!

var category = _fixture.Build<Category>()
    .With(x => x.SubCategories, _fixture.CreateMany<Category>(3).ToList())
    .Create();
Run Code Online (Sandbox Code Playgroud)

这有效,如果有更好的方法请告诉我.

autofixture

5
推荐指数
2
解决办法
2697
查看次数

AttributeRouting ActionLink帮助器渲染查询字符串值,而不是在路由中包含参数

我正在研究我的第一个MVC项目并在我的控制器中使用属性路由.我的一个动作有两个可能的路径路径,我有一个小问题.路线本身正在工作,但生成的actionLinks不符合我的喜好.

路线:

    [Route("add")]
    [Route("{parentId:int?}/add")]
Run Code Online (Sandbox Code Playgroud)

ActionLink定义:

 @Html.ActionLink("Add Category", "Add", "Category", new { parentId = @Model.CurrentCategoryId}, new { @Class = "btn btn-primary"})
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是当currentCategoryId不为null时,生成的链接是这样的:

/categories/add?parentId=2
Run Code Online (Sandbox Code Playgroud)

但我想看到的(当你手动滚动网址时,它会被拿起)是:

/categories/2/add
Run Code Online (Sandbox Code Playgroud)

无论如何我可以通过actionLink或任何其他MVC魔术实现这一目标吗?

asp.net-mvc asp.net-mvc-5.1

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

AutoMapper自定义解析器在构造函数中询问可选参数

我在AutoMapper中遇到了自定义解析器的一些问题.我传递的接口到我的存储库的构造函数,但我不断收到以下错误:

Type needs to have a constructor with 0 args or only optional args
Parameter name: type
Run Code Online (Sandbox Code Playgroud)

我可以通过创建一个无参数构造函数并在那里硬编码我的repo的具体实现来解决它,但我想注入它.

我的解析器:

public class OptionGroupProjectionResolver : ValueResolver<Product, List<OptionGroupProjection>>
{
    private readonly IOptionGroupRepository _optionGroupRepository;

    public OptionGroupProjectionResolver(IOptionGroupRepository optionGroupRepository)
    {
        _optionGroupRepository = optionGroupRepository;
    }

    protected override List<OptionGroupProjection> ResolveCore(Product source)
    {
        var groupIds = new List<int>();
        var optIds = new List<int>();

        foreach (var variant in source.Variants)
        {
            groupIds.AddRange(variant.Options.Select(option => option.GroupId).Distinct());
            optIds.AddRange(variant.Options.Select(option => option.Id).Distinct());
        }

        var groups = _optionGroupRepository.GetAll();

        var results = from gr in groups
                      where groupIds.Contains(gr.Id) …
Run Code Online (Sandbox Code Playgroud)

c# automapper

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