我已经阅读了一些关于Getters和Setter使用的文章/帖子,以及它们如何帮助破解域模型对象中封装的目的.我理解不使用setter背后的逻辑 - 你允许客户端代码在对象业务规则和不变量的上下文之外操纵该对象的属性.
现在这位校长仍然困惑我.例如,如果我需要更改对象的成员变量的值,会发生什么?例如,如果某个人的姓名发生变化,我该如何在模型中反映出来?起初我想,为什么没有一个名为'ChangeName'的函数让我传入新名称,然后又可以改变内部'name'变量.嗯....那只是一个二传手不是吧!
我需要澄清的是 - 如果我要完全消除setter,那么在上述情况下,我是否应该完全依赖构造函数参数?我应该通过构造函数传递新的属性值来代替旧的属性值,之后我可以通过将对象传递给我拥有的任何持久性基础结构来持久化更改吗?
这两篇文章在这个讨论中很有用:
getter setter encapsulation domain-driven-design getter-setter
我有以下接口.由于T是通用的,我不确定如何使用Moq来模拟IRepository.我确定有办法,但我没有找到任何东西通过搜索这里或谷歌.有谁知道我怎么能做到这一点?
我对Moq很新,但可以看到花时间学习它的好处.
/// <summary>
/// This is a marker interface that indicates that an
/// Entity is an Aggregate Root.
/// </summary>
public interface IAggregateRoot
{
}
/// <summary>
/// Contract for Repositories. Entities that have repositories
/// must be of type IAggregateRoot as only aggregate roots
/// should have a repository in DDD.
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IRepository<T> where T : IAggregateRoot
{
T FindBy(int id);
IList<T> FindAll();
void Add(T item);
void Remove(T item);
void Remove(int …Run Code Online (Sandbox Code Playgroud) 这段代码没有太多的上下文,但会说明我的问题.这是我在AMD模块中定义的Backbone视图,我用它来通过require.js加载
基本上我希望能够在运行初始化后将事件添加到Backbone视图.目前我正在创建一个空事件对象,然后在一个名为addView的方法中,每次调用该函数时都会添加一个事件.这目前无效.
我不确定事件在什么时候被注册,但是我怀疑当events对象发生变化时我不得不让视图更新它的监听器?
有没有人知道如何在初始化后向Backbone.js添加事件?
define([
'jQuery',
'Backbone'],
function ($, Backbone) {
var contentViews = new Array();
var SlidePanelView = Backbone.View.extend({
events: {},
/// <param name="targetDataAtt">The unique value inside the target's Data-Slide-Panel-Id attribute</param>
/// <param name="event">Backbone event to trigger view</param>
/// <param name="destroyOnRemove">True to destroy view when removed, False otherwise (Default true)</param>
addView: function (targetDataAtt, event, view, destroyOnRemove) {
destroyOnRemove = typeof destroyOnRemove !== 'undefined' ? destroyOnRemove : true;
this.events[event] = "viewEventFired";
contentViews[targetDataAtt] = { View: view, DestroyOnRemove: destroyOnRemove …Run Code Online (Sandbox Code Playgroud) 我正在使用XUNIT在点网核心应用程序中进行测试.
我需要测试一个内部在我的datacontext中的DbSet上进行异步查询的服务.
我在这里看到,异步模拟DbSet是可能的.
我遇到的问题是,IDbAsyncQueryProvider我正在使用的EntityframeworkCore似乎没有.
我在这里不正确吗?还有其他人有这个工作吗?
(漫长的一天,希望我只是简单地遗漏了一些东西)
编辑
在询问GitHub后,我得到了这个类:https: //github.com/aspnet/EntityFramework/blob/dev/src/Microsoft.EntityFrameworkCore/Query/Internal/IAsyncQueryProvider.cs
这是我到目前为止试图实现的目的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore.Query.Internal;
namespace EFCoreTestQueryProvider
{
internal class TestAsyncQueryProvider<TEntity>: IAsyncQueryProvider
{
private readonly IQueryProvider _inner;
internal TestAsyncQueryProvider(IQueryProvider inner)
{
_inner = inner;
}
IQueryable CreateQuery(Expression expression)
{
return new TestDbAsyncEnumerable<TEntity>(expression);
}
IQueryable<TElement> CreateQuery<TElement>(Expression expression)
{
return new TestDbAsyncEnumerable<TElement>(expression);
}
object Execute(Expression expression)
{
return _inner.Execute(expression);
}
TResult Execute<TResult>(Expression expression)
{
return _inner.Execute<TResult>(expression);
}
IAsyncEnumerable<TResult> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该DefaultHttpContext对象来单元测试我的异常处理中间件.
我的测试方法如下所示:
[Fact]
public async Task Invoke_ProductionNonSuredException_ReturnsProductionRequestError()
{
var logger = new Mock<ILogger<ExceptionHandlerMiddleware>>();
var middleWare = new ExceptionHandlerMiddleware(next: async (innerHttpContext) =>
{
await Task.Run(() =>
{
throw new Exception();
});
}, logger: logger.Object);
var mockEnv = new Mock<IHostingEnvironment>();
mockEnv.Setup(u => u.EnvironmentName).Returns("Production");
var context = new DefaultHttpContext();
await middleWare.Invoke(context, mockEnv.Object);
var reader = new StreamReader(context.Response.Body);
var streamText = reader.ReadToEnd();
//TODO: write assert that checks streamtext is the expected production return type and not the verbose development environment version.
} …Run Code Online (Sandbox Code Playgroud) 我刚刚在Visual Studio 2010项目中切换到使用IIS7.我以管理员身份运行VS 2010.
当我导航到IIS服务器上的页面的URL时,我收到以下消息:
" 无法访问请求的页面,因为页面的相关配置数据无效. "
在详细的错误信息中,它有:
模块: IIS Web核心
通知: BeginRequest
处理程序:尚未确定
错误代码: 0x80070021
配置错误:此配置部分不能在此路径中使用.当该部分被锁定在父级别时会发生这种情况.锁定是默认情况下(overrideModeDefault ="Deny"),或由locationMode ="Deny"或遗留allowOverride ="false"的位置标记显式设置.
配置文件: \?\ C:\ Users\Chris Paynter\Documents\Visual Studio 2010\Projects\TypeTest\TypeTest\web.config
然后在配置源中它以红色显示第48行:
47: <validation validateIntegratedModeConfiguration="false"/>
48: <modules runAllManagedModulesForAllRequests="true"/>
49: </system.webServer>
Run Code Online (Sandbox Code Playgroud)
我是ASP.NET的新手,如果有人能指导我朝着正确的方向解决这个问题,我将不胜感激.
干杯
file1.scss
@function toPx($n) {
@return $n + 0px;
}
Run Code Online (Sandbox Code Playgroud)
file2.scss
body {
font-size:toPx(10);
}
Run Code Online (Sandbox Code Playgroud)
file3.scss
@import "file1.scss";
@import "file2.scss";
Run Code Online (Sandbox Code Playgroud)
file3.css的输出包含
body {
font-size:toPx(10);
}
Run Code Online (Sandbox Code Playgroud)
即使我直接导入到file2.scss中,我也无法使用toPx函数.如果我在file2.scss中声明toPx它会起作用.
我是SASS的新手所以假设我在这里缺少一些简单的东西,有人能告诉我什么吗?
令人惊讶的是Scout,我正在使用的sass编译器,不会抛出错误,而只是将toPx(10)渲染到输出CSS中.
编辑
我发现这个引用似乎表明我需要使用Ruby API才能实现全局功能.有人能够澄清吗?
http://sass-lang.com/docs/yardoc/Sass/Script/Functions.html#adding_custom_functions
我有两个辅助函数来分解十进制价格格式的字符串,即."23.00","2.30"
考虑一下:
char price[4] = "2.20";
unsigned getDollars(char *price)
{
return atoi(strtok(price, "."));
}
unsigned getCents(char *price)
{
strtok(price, ".");
return atoi(strtok(NULL, "."));
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行以下时,我得到一个分段错误:
printf("%u\n", getDollars(string));
printf("%u\n", getCents(string));
Run Code Online (Sandbox Code Playgroud)
然而,当我单独运行它们而没有一个跟随另一个时,它们工作正常.我在这里错过了什么?我必须做某种重置strtok ??
我的解决方案
根据我在下面选择的答案中获得的关于strtok的知识,我更改了辅助函数的实现,以便它们首先复制传入的字符串,从而屏蔽原始字符串并防止出现此问题:
#define MAX_PRICE_LEN 5 /* Assumes no prices goes over 99.99 */
unsigned getDollars(char *price)
{
/* Copy the string to prevent strtok from changing the original */
char copy[MAX_PRICE_LEN];
char tok[MAX_PRICE_LEN];
/* Create a copy of the original string */
strcpy(copy, price);
strcpy(tok, strtok(copy, "."));
/* Return …Run Code Online (Sandbox Code Playgroud) 我正在研究代码访问安全性.我需要付出一些努力来解决问题,所以我认为我最终会使用Reflector并开始研究.NET 4.0如何使用安全属性.
该System.IO.File.Delete方法使用[SecuritySafeCritical]属性进行修饰.
该System.IO.File.Delete方法委托给使用该属性修饰的内部方法InternalDelete[SecurityCritical].
我在我的一个名为DeleteFile的 MVC应用程序类中有一个方法正在运行SecurityTransparent(我已经通过检查DeleteFile的MethodInfo.IsSecurityCritical属性进行了验证)
根据我目前的理解,这意味着:
[SecuritySafeCritical]方法可以调用,[SecurityCritical]因此不会抛出SecurityException.[SecurityTransparent]可以调用[SecuritySafeCritical]所以基本上,在不调整任何开箱即用的安全设置的情况下,此代码将成功删除名为test.txt的虚拟文件
namespace MyTestMvcApp
{
public class FileHelpers()
{
// Has SecurityTransparent
public void DeleteFile()
{
// Will succesfully delete the file
File.Delete("test.txt");
}
}
}
Run Code Online (Sandbox Code Playgroud)
在InternalDelete方法中System.IO.File.Delete,它使用该CodeAccessPermission.Demand方法检查堆栈中的所有调用者是否具有必要的权限.我不太明白的是MSDN文档中的这一行CodeAccessPermission.Demand:
不检查调用此方法的代码的权限; 检查从该代码的直接调用者开始并继续向上移动.
所以我的问题是,如果我的应用程序的DeleteFile方法是SecurityTransparent,如何允许调用SecurityCritical方法?
这可能是一个破旧的例子,或许有一些缺失的概念,但正如我所说,我仍然在理解它,任何洞察力的人都可以给予更多我将发展我的理解. …
每次我将一个分支合并回我的主分支,我就再也无法推动原点了.我收到了消息fatal: master cannot be resolved to branch
我做了一个简单的测试改变:
git branch TestBranchgit checkout Mastergit merge TestBranch合并似乎已经很好了,但是现在当我使用Git状态时,Master分支并没有告诉我它在原点之前.当我试图推动原始大师时,我得到上面的消息.
有谁知道导致这个问题的原因是什么?
c# ×4
.net ×2
.net-core ×2
asp.net ×2
moq ×2
unit-testing ×2
asp.net-core ×1
backbone.js ×1
c ×1
generics ×1
getter ×1
git ×1
git-merge ×1
iis ×1
iis-7 ×1
javascript ×1
sass ×1
security ×1
setter ×1
strtok ×1