小编pla*_*alx的帖子

JavaScript事件系统是否违反了LSP?

我更多地是出于好奇而不是真正关心它,但我一直想知道JavaScript事件系统是否违反了Liskov替换原则(LSP).

通过调用EventTarget.dispatchEvent,我们可以调度一个Event可能由注册处理的任意类型EventListener.

interface EventListener {
  void handleEvent(in Event evt);
}
Run Code Online (Sandbox Code Playgroud)

如果我正确理解LSP,那就意味着不anyEventListener.handleEvent(anyEvent)应该失败.但是,通常情况并非如此,因为事件侦听器通常会使用专用Event子类型的属性.

在不支持泛型的类型语言中,该设计基本上需要将Event对象向下转换为期望的子类型EventListener.

根据我的理解,上述设计可能被视为违反LSP.我是否正确或type通过注册监听器提供的简单事实EventTarget.addEventListener可以防止LSP违规?

编辑:

虽然每个人似乎都在关注Event子类没有违反LSP的事实,但实际上我关注的是EventListener实现者会通过加强EventListener接口的前提条件来违反LSP .void handleEvent(in Event evt)合同中没有任何内容告诉您通过传递错误的Event子类型可能会破坏某些内容.

在具有泛型的强类型语言中,接口可以表达为EventListener<T extends Event>使得实现者可以使合同明确,例如SomeHandler implements EventListener<SomeEvent>.

在JS中,显然没有实际的接口,但事件处理程序仍然需要符合规范,并且该规范中没有任何内容允许处理程序判断它是否可以处理特定类型的事件.

这不是一个真正的问题,因为不希望监听器自己被调用,而是EventTarget被注册并与特定类型相关联的监听器调用.

我只是对根据理论是否违反LSP感兴趣.我想知道是否要避免违规(如果理论上认为是这样),合同将需要像以下那样(尽管它在实用主义方面可能做得更糟糕):

interface EventListener {
  bool handleEvent(in Event evt); //returns wheter or not the event …
Run Code Online (Sandbox Code Playgroud)

javascript liskov-substitution-principle javascript-events

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

如何将当前文档的innerHTML下载为文件?

有没有办法innerHTML编程方式将当前文档作为文件下载?

我做了以下尝试但没有成功.它确实下载了当前文档的源代码,但这不是我想要的,因为我想保留任何后载文档修改.

 var save = document.createElement('a');
 save.href = "my location href.attr";
 save.target = '_blank';
 save.download = fileName || 'unknown';

 var event = document.createEvent('Event');
 event.initEvent('click', true, true);
 save.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

javascript download dispatchevent

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

为什么通过DOMParser创建的脚本元素不会执行?

我在Ajax中加载HTML,解析它DOMParser并将所有childNodes文档主体放入文档片段中.

当我将片段添加到当前文档的正文中时,<script>不会执行标记.

我摆弄并想出如果我用新动态创建的脚本标签替换它们,它们就会被正确执行.

我想知道为什么?

例如

var html = "Some html with a script <script>alert('test');</script>";

var frag = parsePartialHtml(html);


fixScriptsSoTheyAreExecuted(frag);


document.body.appendChild(frag);


function fixScriptsSoTheyAreExecuted(el) {
  var scripts = el.querySelectorAll('script'),
      script, fixedScript, i, len;

  for (i = 0, len = scripts.length; i < len; i++) {
    script = scripts[i];

    fixedScript = document.createElement('script');
    fixedScript.type = script.type;
    if (script.innerHTML) fixedScript.innerHTML = script.innerHTML;
    else fixedScript.src = script.src;
    fixedScript.async = false;

    script.parentNode.replaceChild(fixedScript, script);
  }
}


function parsePartialHtml(html) {
  var doc = …
Run Code Online (Sandbox Code Playgroud)

html javascript dynamic-script-loading

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

更改Symfony 3控制器文件夹

我正在使用Symfony 3进行一个项目,我想让我的AppBundle文件夹像这样:

  • 的appbundle /
    • 域/
    • 应用/
    • Infrasctructure /
    • 用户界面/
      • 控制器/
        • DefaultController /

我想将"Controller"文件夹放在UserInterface图层中.问题是加载控制器的Symfony魔术方法是在"AppBundle/Controller"路径上搜索它们.

有没有选项在我的routing.yml文件中指定控制器路径?

app.home_page:
  path: /test
  defaults: {_controller: AppBundle:UserInterface\Default:indexAction}
Run Code Online (Sandbox Code Playgroud)

controller path symfony

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

基于主干的开发版本和修补程序问题

我无法理解如何处理以下情况:

  1. 功能A被提交master为commit A
  2. 我们准备好发布了,v1.0.0因此我们将commit标记A为,v1.0.0然后rel-1.0.x从中创建一个发布分支以进行质量检查。
  3. 功能B被提交master为commit B
  4. 质量检查批准v1.0.0,我们部署并删除rel-1.0.x分支。
  5. 我们已经准备好发布,v2.0.0因此我们将commit标记B为,v2.0.0rel-2.0.x从中创建一个分支以进行质量检查。
  6. 在生产(v1.0.0)中发现了一个错误,必须立即进行修复和部署。

在这一点上,我不确定我们应该如何处理。如果该错误位于主干中,则可以从该主干创建一个修补程序分支,修复该错误并合并到主干中。然后,rel-1.0.1从创建分支v1.0.0,从主干中挑选修复程序,将其标记为v1.0.1并部署。

现在,我感到奇怪的是,鉴于v1.0.1提交是master从分支中精心挑选master并标记的,因此提交不是按原样进行的rel-1.0.1。此外,如果还需要修复,rel-2.0.x那么我们应该如何处理呢?我们是否应该再次从主干中挑选错误修复,并将其标记为其他版本,例如v2.0.1

这是我上面要做的图(请注意,v1.1代表上述文本的2.0版,并且是Second feature A fix在准备v1.1发行版时发生的)。

在此处输入图片说明

git version-control branching-strategy

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

如何透明地将文件流式传输到浏览器?

受控环境:IE8,IIS 7,ColdFusion

当从IE发出指向媒体文件(如.mp3,.mpeg等)的GET请求时,浏览器将启动关联的应用程序(Window Media Player),我猜想IIS服务文件的方式允许应用程序流它.

我们希望能够完全控制文件的流处理过程,以便我们可以在特定时间和某些用户允许它.出于这个原因,我们不能简单地让IIS直接提供文件,我们希望使用ColdFusion来提供文件.

我们尝试了一些不同的方法,但在每种情况下,浏览器都会在启动外部应用程序之前下载整个文件内容.这就是我们想要避免的.

请注意,我们不需要基于NTFS权限的解决方案.

看起来最有希望的解决方案是使用ColdFusion将文件传输到客户端而不将整个文件加载到内存中但似乎提供的唯一优势是文件在提供给浏览器时不会完全加载到内存中,但是浏览器仍然等待传输结束,然后在Winwodw Media Player中打开文件.

有没有办法使用ColdFusion或Java将文件流式传输到浏览器并让浏览器将处理委托给关联的应用程序,就像我们让IIS直接提供文件一样?

java iis coldfusion streaming http

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

SELECT表达式有时可以针对不匹配WHERE子句的行进行求值吗?

我想知道是否可以为SELECT不匹配该WHERE子句的行评估作为语句列表一部分的表达式?

这里记录的执行顺序来看,似乎SELECT很久之后就会对它进行评估WHERE,但是我遇到了一个非常奇怪的问题,现实生活中的查询类似于下面的查询.

为了使您进入上下文,在示例中,SomeOtherTable有一个a_varchar列始终包含code105的数值,但可能包含其他代码的非数值.

查询语句有效:

    SELECT an_id, an_integer FROM SomeTable

    UNION ALL

    SELECT an_id, CAST(a_varchar AS int)
    FROM SomeOtherTable
    WHERE code = 105
Run Code Online (Sandbox Code Playgroud)

以下查询抱怨无法转换a_varcharint:

SELECT 1
FROM (
    SELECT an_id, an_integer FROM SomeTable

    UNION ALL

    SELECT an_id, CAST(a_varchar AS int)
    FROM SomeOtherTable
    WHERE code = 105
) i
INNER JOIN AnotherOne a
    ON a.an_id = i.an_id
Run Code Online (Sandbox Code Playgroud)

最后,以下查询有效:

SELECT 1 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

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

FluentValidation Method Not Found 异常的原因是什么?

我有一个域驱动设计解决方案,由于某种原因,当通过GateWay进行 API 调用时,我在运行时遇到此异常:

One or more errors occurred. (Method not found: 'Void FluentValidation.AbstractValidator`1.When(System.Func`2<!0,Boolean>, System.Action)'.)
Run Code Online (Sandbox Code Playgroud)

出现错误如下:

我有这样的解决方案:

我现在关注的主要 4 个项目是:

  1. 核心模型
  2. 账户.Api
  3. 服务.Api.网关
  4. 网络客户端

Web.ClientSite发出请求,Service.Api.Gateway然后调用Account.Api. 请注意,到处都Core.Model引用了

非常重要:如果我从 中删除 FluentValidation 的引用Core.Model,异常就会消失。

我希望这些信息足够了。您认为我为什么会遇到此异常以及如何消除。

exception fluentvalidation api-gateway

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

识别退回的EmailMessage(EWS)

有没有办法使用EWS准确识别邮箱中退回的电子邮件通知?到目前为止,我已经查看了邮件标题,似乎没有任何内容表明邮件是电子邮件退回通知.

我也看了看ItemEmailMessage成员,没有找到任何有用的东西(我可能错过了一些东西).

我总是可以解析总是说"电子邮件传送系统"或主题行甚至邮件正文的发件人,但我正在寻找一种更清晰的方法来做到这一点.

exchange-server exchangewebservices

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

OOP - 关于 DDD 的私有字段或私有属性设置器

今天办公室里出现了关于使用它是否是 OOP 约定的讨论:

private string myField;

public string MyProperty {
    get { return myField; }
}

public MyClass(string field) {
    myField = field;
}
Run Code Online (Sandbox Code Playgroud)

对此:

public string MyProperty {
    get;
    private set;
}

public MyClass(string field) {
    MyProperty = field;
}
Run Code Online (Sandbox Code Playgroud)

在领域驱动开发期间。

我们看过的许多 DDD 示例都使用上面的第一种方法来编写代码,但从来没有使用第二种方法。我知道我们办公室的几个人(包括我自己)出于各种原因个人偏好第二种方法,而其他人则更喜欢第一种方法,或者不关心使用哪种方法。

目前,我们的代码混合在两种不同的方法之间,一些类使用方法 #1,其他类使用方法#2,还有一些类使用两者的组合(一个属性可能具有公共 get/私有集,而另一个属性仅具有返回的公共 get)私人领域)。

基本上,我们想知道哪种方法最适合 DDD OOP 最佳实践,以及为什么我们需要进行代码春季清理,而整理域内部是列表中的项目之一。

c# oop

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

使用Dojo获取具有ID的元素,该ID以某些字符开头

我有一个由以下HTML标记定义的节点:

<div id="_13:3AVAsa7qVvAprAar19ie8LRorrLEm2g" >asdf</div>
Run Code Online (Sandbox Code Playgroud)

我需要获得它的引用,而不使用它的完整ID,如:

dojo.byId('_13:*'); 
Run Code Online (Sandbox Code Playgroud)

是否有可能或是否有其他方法可以实现?

javascript dojo

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

自有类型的延迟加载

我正在使用 Entity Framework Core 迈向领域驱动设计的第一步。我有一个User实体,在简化版本中,只有IdProfilePhoto。但是,我想将个人资料照片存储在不同的表中,这就是为什么我创建了一个包含个人资料照片的拥有类型并以这种方式配置:

用户:

public class User
{
    private int id;
    public int Id => this.id;

    //private UserProfilePhoto userProfilePhoto;
    public virtual UserProfilePhoto UserProfilePhoto { get; set; }

    private User()
    {
    }

    public static User Create(byte[] profilePhoto)
    {
        var user = new User();
        user.UserProfilePhoto = new UserProfilePhoto(profilePhoto);

        return user;
    }

    public void SetProfilePhoto(byte[] profilePhoto)
    {
        this.UserProfilePhoto = new UserProfilePhoto(profilePhoto);
    }
}
Run Code Online (Sandbox Code Playgroud)

用户资料照片:

public class UserProfilePhoto
{
    public byte[] ProfilePhoto { get; private set; …
Run Code Online (Sandbox Code Playgroud)

c# lazy-loading entity-framework-core ef-core-3.1

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