小编nul*_*ter的帖子

面向服务的体系结构和域驱动设计

我总是以SOA类型的方式开发代码.今年我一直在努力做更多的DDD,但我一直觉得我没有得到它.在工作中,我们的系统是负载平衡的,并且设计为不具有状态.该架构是:

网站

===物理层==

主要服务

==物理层==

服务器1 /服务2 /服务3 /服务4

只有服务器1,服务2,服务3和服务4可以与数据库通信,主服务根据订购的产品调用正确的服务.每个物理层也是负载平衡的.

现在,当我开发一项新服务时,我尝试在该服务中考虑DDD,即使它并不真正感觉它适合.

我使用良好的DDD原则,如实体,值类型,存储库,聚合,工厂等.

我甚至尝试使用ORM,但他们似乎并不适合无状态架构.我知道有很多方法,例如使用IStatelessSession而不是NHibernate的ISession.但是,ORM只是觉得它们不适合无状态架构.

我注意到我真的只使用了DDD教给我的一些概念和模式,但整体架构仍然是SOA.

我开始认为DDD不适合大型系统,但我认为一些模式和概念确实适合大型系统.

就像我说的,也许我只是没有抓住DDD或者我可能不在分析我的设计?也许通过使用DDD告诉我的模式和概念我使用DDD?不确定这篇文章是否真的有问题,但在尝试找出DDD在整个系统中的适用位置以及它的真实可扩展性时,我有更多的想法.事实是,我认为我甚至不知道DDD是什么?

soa design-patterns domain-driven-design

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

具有IP地址的JWT安全性

我正在使用Angular 2和ASP.NET Core Web API中内置的后端服务来构建Web应用程序。

对于身份验证,我正在考虑使用JWT令牌并将其存储在安全的HttpOnly Cookie中。

为了提高安全性,我还考虑在初次登录时以及初次登录后的每个请求中为用户捕获IP地址,如果IP地址更改,则吊销令牌。

所以我的问题是:

  • 这种额外的安全性值得吗?
  • 我正在考虑使用IP检查是否有任何问题?根据我对网络的了解,我认为IP地址不会在请求之间合法地更改。即使这样,我认为这将是非常罕见的。但是,我不会假装我对网络知识足够了解。

编辑1

(响应一个答案)。

谢谢你回答我的问题。我已经回复了您的一些回复。

我最初的想法是,在cookie中使用JWT连接到API并不是典型的用例,为什么不使用标准MVC应用程序,但这不是您的问题,实际上,只要令牌是安全的,它同样安全在安全的httponly cookie中(当然实现是正确的)。我认为这有点不寻常。

我不确定您为什么考虑以这种方式使用Cookie异常?

是因为大多数时候cookie都用于会话状态吗?我个人认为,将令牌存储在安全的cookie中而不是将其保留在标http头或本地存储中应该是一个非常典型的用例,因为它的安全性更高。除非我想念什么?

因此,我想我会问这样做的缺点是什么?

这取决于。如果您担心会话被盗,可能是的。如果将令牌保存在httponly cookie中(针对xss进行了保护),则它比其他任何地方的令牌都更安全,但是,威胁模型仍可能显示不同的威胁并验证您的关注。通常的问题是您无法执行此操作,请参见下文。

该应用程序将处理许多PPI信息,因此我确实对令牌盗窃有所关注。

很有可能会有问题。这取决于您的用户,他们如何以及从何处使用您的应用程序。如果他们使用移动设备,则IP地址将发生很大变化,而这样的解决方案是不可能的。如果他们是公司内部网络中的公司用户,那将是可行的。它们之间是灰色区域。典型的家庭用户会不时更改其IP,大多数人会从其互联网提供商处获得动态IP分配。IP租约通常可持续数周(至少在我居住的地方),但是ISP可以根据需要配置它,可能需要一天甚至更短的时间。

我对IP地址租约续约的印象是,大多数情况下,客户端会获得相同的IP地址。但是,我不应该做出我认为的假设吗?

但是我可以看到,这对于移动设备来说可能是一个更大的问题。有些客户经常出差,所以这是您提出的一个好问题,可能会成为问题。

您可以选择执行的一种典型解决方案是在登录屏幕上提供此选项。如果用户选择使用IP地址验证,则他会选择更高的安全性,但会接受有时可能不得不再次登录的事实。或者,他可以选择较低的安全性,使其会话更稳定。我认为是否值得向您的用户解释这一点是一项商业决策。

从未考虑过给客户一个听起来不错的选择。

编辑2

(响应一个答案)。

另外,我不确定您的JWT是否只有一个会话ID,或者您的服务器是否为无状态且所有会话数据都在JWT中。在第一种情况下,您甚至不需要JWT,您可以像往常一样传递会话ID,而标准的.Net MVC可以为您实现。如果它也是会话数据,则JWT默认情况下未加密,因此会话内容对于最终用户将是可见的,这可能是问题,也可能不是问题。(而且,JWT的签名受到保护,不会被篡改,因此它仅是关于机密性,而不是完整性)。根据您的目标浏览器,将会话数据存储在JWT中以及将JWT存储在cookie中也可能会遇到cookie大小问题。

我的后端ASP.NET Core Web API将是无状态的。已经做出使用决定,Angular因此讨论是有争议的。

至于为什么我认为以这种方式使用JWT有点不寻常:我认为JWT通常在需要将令牌传递到不同的URL(传递到不同的服务)时使用。为此,由于相同的原产地规则,httpOnly cookie显然不足。如果您负担得起使用httpOnly cookie的费用,则可以将会话信息存储在服务器端。

由于我的解决方案可能存在缺陷,我很想讨论上述主题,我认为可能会关闭这篇文章的话题吗?

提出针对上述主题的新问题也许更合适?

至于产生相同IP的租约续约:嗯,它们并不总是如此。这取决于您的业务情况,但是某些ISP仅在短时间内为您提供IP。如果您的用户偶尔可以注销,那么有线(家庭)用户也可以。对于移动设备,这绝对是一个大问题。

security authentication cookies jwt asp.net-core

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

Metro Theme系统画笔不会更改

我一直在研究我的第一个Metro应用程序,我想将我的主题从默认的黑暗主题改为轻主题.如果您查看VS11和Blend中的平台窗格,看起来Metro有一些内置主题.我假设将主题从默认(黑暗)更改为Light会将系统画笔从黑暗变为浅色.它确实在设计师中起作用,但在运行程序时,一切都仍然很暗.

我是否做错了让系统画笔改变,或者我是否错过了平台主题的意义?或者它只是一个错误?

microsoft-metro windows-8 visual-studio-2012

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

来自 webpack 的打字稿中未定义全局变量

typescript 2.4.0我尝试使用DefinePluginusing创建全局/环境变量webpack。所以这是我试图采取的方法:

webpack.js 定义部分

new webpack.DefinePlugin({
   environment: JSON.stringify('DEVELOPMENT'),
}),
Run Code Online (Sandbox Code Playgroud)

globals.ts

declare const environment: String;
console.log(environment);
export { environment };
console.log(environment);
Run Code Online (Sandbox Code Playgroud)

环境服务.ts

import { IEnvironment } from 'environment';
import { environment } from '../globals';
console.log(environment);

export default class EnvironmentService implements IEnvironment  {
  environmentName: String = environment;

  get isDevelopment(): boolean {
    return this.environmentName === 'DEVELOPMENT';
  }

  get isProduction(): boolean {
    return this.environmentName === 'PRODUCTION';
  }
}
Run Code Online (Sandbox Code Playgroud)

在控制台日志中,我得到:

DEVELOPMENT
DEVELOPMENT
undefined
Run Code Online (Sandbox Code Playgroud)

所以当我期待的时候,console.log(environment);内心environmentService.ts给了我undefined …

javascript webpack typescript2.0

7
推荐指数
2
解决办法
6127
查看次数

在Domain-Driven-Design中定义应用程序层

我有一个关于DDD的问题.我正在构建一个学习DDD的应用程序,我有一个关于分层的问题.我有一个像这样工作的应用程序:

UI层调用=>应用层 - >域层 - >数据库

以下是代码外观的一个小示例:

//****************UI LAYER************************
//Uses Ioc to get the service from the factory.
//This factory would be in the MyApp.Infrastructure.dll
IImplementationFactory factory = new ImplementationFactory();

//Interface and implementation for Shopping Cart service would be in MyApp.ApplicationLayer.dll
    IShoppingCartService service = factory.GetImplementationFactory<IShoppingCartService>();

    //This is the UI layer,
    //Calling into Application Layer
    //to get the shopping cart for a user.

    //Interface for IShoppingCart would be in MyApp.ApplicationLayer.dll
    //and implementation for IShoppingCart would be in MyApp.Model.
    IShoppingCart shoppingCart = …
Run Code Online (Sandbox Code Playgroud)

architecture design-patterns domain-driven-design

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

使用Gunicorn运行Flask引发TypeError:index()获取0个位置参数,但给出了2个

我正在尝试用Gunicorn运行Flask应用程序.当我跑gunicorn app:index,我得到错误TypeError: index() takes 0 positional arguments but 2 were given.我见过的所有例子都没有显示index需要两个参数.这个错误是什么意思?如何使用Gunicorn运行Flask?

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)
gunicorn app:index
Run Code Online (Sandbox Code Playgroud)
    respiter = self.wsgi(environ, resp.start_response)
TypeError: index() takes 0 positional arguments but 2 were given
Run Code Online (Sandbox Code Playgroud)

我改变index了两个参数,但得到了一个不同的错误.

@app.route("/")
def index(arg1, arg2):
    return 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)
  /python3.4/site-packages/flask/templating.py, line 132, in render_template
    ctx.app.update_template_context(context)
AttributeError: 'NoneType' object has no attribute 'app'
Run Code Online (Sandbox Code Playgroud)

python flask gunicorn

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

如何获得纱线安装 - 使用node-sass工作的离线?

我试图yarn在离线模式下使用,因为我使用的构建服务器无法访问yarn注册表或github.com.

我发现这篇关于如何yarn在离线模式下使用的文章,在我添加node-sass之前一直很好用.

它即使你使用yarn install --offline,node-sass也会去github.com下载libsass.

有没有办法指示node-sass使用离线版libsass而不是去github.com

sass node-sass yarnpkg

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

Blend For Visual Studio 11出错

  • 已安装Windows 8 Consumer Preview
  • 安装Visual Studio 2010 Premium
  • 安装了Visual Studio 11 Ultimate

一切安装没有任何错误.

我使用Visual Studio 11创建了一个新的Windows 8 Metro应用程序,在VS 11设计器中查看xaml没有任何问题.如果我在Blend For Visual Studio 11中查看它有错误的propup:

无法打开项目"TestApp.csproj".找不到导入的项目"C:\ Program Files(x86)\ MSBuild\Microsoft\WindowsXaml\v11\Microsoft.Windows.UI.Xaml.CSharp.Targets".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.c:\ Users\testuser\Documents\Visual Studio 11\Projects\TestApp\testApp.csproj

此外,如果我在Blend For Visual Studio 11中创建Windows Metro风格项目(任何模板),它在完成后会显示一个空的解决方案.当我查看它想要创建它的目录时,我只看到项目文件但没有解决方案.

还有其他人有过这些问题吗?

现在唯一的问题是如何

- 评论1--

不,路径C:\ Program Files(x86)\ MSBuild\Microsoft\WindowsXaml**v11**\Microsoft.Windows.UI.Xaml.CSharp.Targets不存在.文件系统上的路径是C:\ Program Files(x86)\ MSBuild\Microsoft\WindowsXaml**v11.0**\Microsoft.Windows.UI.Xaml.CSharp.Targets

当我查看项目文件时,这就是我所看到的:

<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' ">
    <VisualStudioVersion>11.0</VisualStudioVersion>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
Run Code Online (Sandbox Code Playgroud)

项目文件似乎告诉它正确的位置,所以我不确定为什么它试图查找错误的路径?

- 评论结束1--

blend microsoft-metro windows-8 visual-studio-2012

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

经常使用的目录

我经常在我的机器上有大约3或4个目录,并希望能够轻松直接进入这些目录,而不是总是输入它们.

我能想到的最好方法是设置环境变量.但是,执行"cd env:"不起作用.

无论如何,有什么想法最好的方法来做到这一点?

*编辑1* 我希望我的会话结束时不会失去一种方法(例如,关闭PS窗口.).

powershell powershell-3.0

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

了解左值和左值并且不确定此代码的工作原理

我正在玩C++(自从我使用该语言已有10多年了)并编写了下面的小程序并对结果感到有些惊讶:

#include <iostream>

int& getReference()
{
    int x = 33;
    return x;
}

int main()
{
    auto a = getReference() = 4;
    auto b = getReference();

    std::cout << "a: " << a << " b: " << b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我期待"a:33 c:33"时输出为"a:4 c:33".

我期望"a"等于33的原因是因为我首先将getReference左值返回引用设置为4,而"return x"覆盖了带有33的左值引用.

无论如何,我想也许可以解释我在哪里错了?

谢谢大家的帮助!

编辑1 这么多回复真的很快.谢谢大家的帮助!

编辑2我不确定是否为时已晚,或者我应该将其作为一个新问题.我将"x"改为全局变量,得到了相同的答案.所以我现在仍然感到困惑,因为全局变量x并没有消失.

c++ c++11

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