小编Sco*_*ott的帖子

C#中重用的抽象原则

在我们的C#MVC应用程序中,我们有很多接口,它们将实现它们的对象映射为1到1.即:基本上,对于创建的每个对象,已经执行了"提取界面"操作.

Moq使用这些接口为我们的单元测试生成模拟对象.但这是接口重复使用的唯一时间.

我们系统中没有具体对象实现多个接口.

谁能告诉我这是否会导致问题在路上?如果是这样,他们会是什么?

我在想,我们的应用程序有很多重复,例如在这两个接口(编辑:在我们的服务层)中,唯一不同的是方法名称和它们所采用的参数类型,但在语义上他们做与他们发送消息的存储库相同:

interface ICustomer
{
    void AddCustomer(Customer toAdd);
    void UpdateCustomer(Customer toUpdate);
    Customer GetById(int customerId);
}

interface IEmployee
{
    void AddEmployee(Employee toBeAdded);
    void UpdateEmployee(Employee toUpdate);
    Employee GetById(int employeeId);       
}
Run Code Online (Sandbox Code Playgroud)

这就是我认为重用的抽象原则会出现的地方,即将代码转换为类似的东西:

public interface IEmployee: IAdd<Employee>, IUpdate<Employee>, IFinder<Employee>
Run Code Online (Sandbox Code Playgroud)

这与存储库模式无关 - 这是关于任何层中的接口,看起来它们共享语义相同的行为.是否值得为这些操作派生通用接口并使"子接口"继承它们?

至少它会保持方法的签名一致.但这会给我带来什么其他好处呢?(除了利斯科夫替代原则)

现在,方法的名称和返回类型都到处都是.

我读过Mark Seemann关于Reused抽象原理的博客,但我不明白,坦白说.也许我只是愚蠢:)我还阅读了Fowler对Header Interfaces的定义.

c# oop abstraction solid-principles

12
推荐指数
2
解决办法
1110
查看次数

ko.Computed()没有使用observableArray进行更新

我有以下代码:

// First we define our gift class, which has 2 properties:
// a Title and a Price.
// We use knockout js validation to ensure that the values input are suitable/ 
function Gift(item)
{
    var self = this;
    self.Title = ko.observable(item.Title);

    // attach some validation to the Title property courtesy of knockout js validation
    self.Title.extend({
        required: true,
        minLength: 3,
        pattern: {
            message: 'At least ',
            params: '^[a-zA-Z]+\s?[a-zA-Z]*'
        }
    });
    self.Price = ko.observable(item.Price);
    self.Price.extend({required:true,number:true,min:0.1,max:1000});
};


var viewModelForTemplated =
{
    gifts: …
Run Code Online (Sandbox Code Playgroud)

javascript updating ko.observablearray knockout.js

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

是否可以从TFS创建一个docker容器并为其部署一个发布版本?

我们正在运行本地TFS 2017.我想为我们的QA团队创建一个发布定义,它将创建一个运行Windows 7的Docker容器,并自动部署我们的发布版本.

部署完成后,QA团队应该能够登录容器来测试应用程序.无需手动运行MSI安装程序或Setup.exe.

理想情况下,每个排队版本都将创建自己的容器,并使用自己的已发布版本副本.

这可能吗?还是推荐?我们所有的服务器和主机都是内部的,我们不会使用Azure.

提前感谢任何建议.

tfs release-management docker tfs2017

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

如何检测Winforms应用程序已空闲一段时间

检测C#Winforms应用程序是否已空闲一段时间的最佳方法是什么?

如果用户决定使用ALT + TAB并使用Microsoft Word或其他任何工作30分钟,让我们的应用程序未使用,我希望我们的应用程序自行终止.

这是类似问题的可接受答案: 检查应用程序是否在一段时间内处于空闲状态并将其锁定

但是,答案与Windows闲置一段时间有关,而不是特定的应用程序.我希望我们的应用程序终止,如果它没有被用于说,30分钟.

我看着这个:

http://www.codeproject.com/Articles/13756/Detecting-Application-Idleness

但是我在评论中读到这对多线程应用程序不起作用,我们的应用程序就是其中之一.我们的应用程序有一个主窗体,它产生模态和无模式窗体,使用Async Await来填充网格等.

然后我查看了SetWindowsHookEx,不确定这是否有用.

当然有人有一个解决方案(希望与.NET 4.5兼容):)

TIA

.net c# winforms

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