问题列表 - 第7514页

数据映射器,表数据网关(网关),数据访问对象(DAO)和存储库模式之间有什么区别?

我正在努力提高我的设计模式技巧,我很好奇这些模式之间有什么区别?所有这些看起来都是一样的 - 封装了特定实体的数据库逻辑,因此调用代码不了解底层持久层.从我的简短研究中,他们通常都会实现您的标准CRUD方法并抽象出特定于数据库的详细信息.

除了命名约定(例如CustomerMapper与CustomerDAO vs. CustomerGateway vs. CustomerRepository)之外,有什么区别?如果存在差异,您何时会选择一个而不是另一个?

在过去,我会编写类似于以下的代码(简化,自然 - 我通常不会使用公共属性):

public class Customer
{
    public long ID;
    public string FirstName;
    public string LastName;
    public string CompanyName;
}

public interface ICustomerGateway
{
    IList<Customer> GetAll();
    Customer GetCustomerByID(long id);
    bool AddNewCustomer(Customer customer);
    bool UpdateCustomer(Customer customer);
    bool DeleteCustomer(long id);
}
Run Code Online (Sandbox Code Playgroud)

并有一个CustomerGateway类为所有方法实现特定的数据库逻辑.有时我不会使用接口并使CustomerGateway上的所有方法都是静态的(我知道,我知道,这使得它不太可测试)所以我可以这样称呼它:

Customer cust = CustomerGateway.GetCustomerByID(42);
Run Code Online (Sandbox Code Playgroud)

这似乎与Data Mapper和Repository模式的原理相同; DAO模式(与Gateway相同,我认为?)似乎也鼓励特定于数据库的网关.

我错过了什么吗?有3-4种不同的方式做同样的事情似乎有点奇怪.

c# dao datamapper repository table-data-gateway

130
推荐指数
4
解决办法
3万
查看次数

在PowerShell中选择字符串(grep)时,如何仅返回匹配的正则表达式?

我试图在文件中找到一个模式.当我得到一场比赛时,Select-String我不想要整条线,我只想要匹配的部分.

有没有我可以用来做这个的参数?

例如:

如果我做了

select-string .-.-.
Run Code Online (Sandbox Code Playgroud)

并且该文件包含一行:

abc 1-2-3 abc
Run Code Online (Sandbox Code Playgroud)

我想得到的结果只有1-2-3,而不是返回整行.

我想知道Powershell相当于一个 grep -o

regex powershell grep

41
推荐指数
7
解决办法
6万
查看次数

在for循环中倒计时

我相信(从一些研究阅读中),在for循环中倒计时实际上在运行时更有效,更快.我的完整软件代码是C++

我目前有这个:

for (i=0; i<domain; ++i) {
Run Code Online (Sandbox Code Playgroud)

我的'i'是unsigned resgister int,'domain'也是unsigned int

在for-loop中,i用于遍历数组,例如

array[i] = do stuff
Run Code Online (Sandbox Code Playgroud)

把它转换成倒计时会弄乱我的例行程序的预期/正确输出.

我可以想象答案是微不足道的,但我无法理解它.

更新:'do stuff'不依赖于之前或之后的迭代.for循环中的计算与i的迭代无关.(我希望这是有道理的).

更新:要使用我的for循环实现运行时加速,我是否倒计时,如果是这样,在删除我的int时删除未签名的部分,或者其他什么方法?

请帮忙.

c++ for-loop

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

ASP.NET缓存和文件依赖性

我希望在触摸特定文件时回收ASP.NET缓存项,但以下代码不起作用:

                       HttpContext.Current.Cache.Insert(
                            "Key",
                            SomeObject,
                            new CacheDependency(Server.MapPath("SomeFile.txt")),
                            DateTime.MaxValue,
                            TimeSpan.Zero,
                            CacheItemPriority.High,
                            null);
Run Code Online (Sandbox Code Playgroud)

我在点击缓存时似乎没有检查"SomeFile.txt",修改它不会导致此项无效.

我究竟做错了什么?

asp.net caching file-dependancy

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

红宝石开发环境

在a)windows b)linux或c)mac中开发ruby是否更好?为什么?

编辑:

我之所以这么说是因为我听说在windows中使用ruby在轨道上开发红宝石并不是那么稳定/好.(不确定,如果这是真的).

此外,David Heinemeier Hansson(Ruby on Rails的创建者)似乎正在使用Mac,因此最初的印象似乎是Ruby on Rails应用程序,而Mac则很好地融合在一起.

ruby development-environment ruby-on-rails

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

为什么std :: ends导致字符串比较失败?

我昨天花了大约4个小时试图在我的代码中解决这个问题.我将问题简化为下面的示例.

我们的想法是将字符串存储在以std :: ends结尾的字符串流中,然后将其检索并将其与原始字符串进行比较.

#include <sstream>
#include <iostream>
#include <string>

int main( int argc, char** argv )
{
    const std::string HELLO( "hello" );

    std::stringstream testStream;

    testStream << HELLO << std::ends;

    std::string hi = testStream.str();

    if( HELLO == hi )
    {
        std::cout << HELLO << "==" << hi << std::endl;
    }

    return 0;
}

正如您可能猜到的,上面的代码在执行时不会打印出任何内容.

虽然,如果打印出来,或者在调试器(VS2005)中查看,HELLO和hi看起来相同,它们的.length()实际上相差1.这就是我猜测导致"=="运算符失败的原因.

我的问题是为什么.我不明白为什么std :: ends是一个不可见的字符添加到字符串hi,使hi和HELLO的长度不同,即使它们具有相同的内容.此外,这个看不见的角色不会被增强修剪修剪.但是,如果使用strcmp比较两个字符串的.c_str(),则比较正常.

我首先使用std :: ends的原因是因为我在过去遇到了一些问题,因为stringstream在流的末尾保留了垃圾数据.std :: ends为我解决了这个问题.

c++ boost stl

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

关键部分在Vista/Win2008上泄漏内存?

似乎在Vista/Windows Server 2008中使用关键部分导致操作系统无法完全恢复内存.我们在Delphi应用程序中发现了这个问题,显然是因为使用了CS API.(见这个问题)

有没有其他人用其他语言开发的应用程序(C++,...)看到它?

示例代码只是初始化10000000 CS,然后删除它们.这在XP/Win2003中运行良好,但在应用程序结束之前不会释放Vista/Win2008中的所有峰值内存.
您使用CS的次数越多,您的应用程序就会越多地保留内存.

memory-leaks critical-section windows-vista windows-server-2008

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

按字符串获取PHP类属性

如何根据字符串获取PHP中的属性?我会叫它magic.那是什么magic

$obj->Name = 'something';
$get = $obj->Name;
Run Code Online (Sandbox Code Playgroud)

就像......

magic($obj, 'Name', 'something');
$get = magic($obj, 'Name');
Run Code Online (Sandbox Code Playgroud)

php oop string properties

129
推荐指数
6
解决办法
11万
查看次数

WPF:当最终高度未知时,动画ListView的高度

我有一个ListView,它在我的XAML中非常简单地定义,就像这样

<ListView Name="myListVew" MaxHeight="200" Visibility="Collapsed">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Line" Width="Auto" DisplayMemberBinding="{Binding Line}" />
            <GridViewColumn Header="Error" Width="Auto" DisplayMemberBinding="{Binding Error}" />
        </GridView>
    </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)

当我希望ListView出现时,我希望从0开始为列表视图的高度设置动画.问题是,我不知道ListView的最终高度,因为它将取决于其中显示的项目数量.无论如何这样做?

.net wpf animation listview

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

如果查询没有返回任何值,在返回的对象中使用sentinal值"-1"被认为是不好的做法吗?

我在DataModel.cs类中有以下代码:

    public User ValidateUser(string Username, string Password)
    {
        DataContext db = new DataContext();

                var query = from u in db.Users where (u.Username == Username && u.Password == Password) select u;

                if (query.Count() != 0)
                {
                    return query.First();
                }
                else
                {
                    return new User { UserID = -1 };
                }
    }
Run Code Online (Sandbox Code Playgroud)

我有一个登录类在我的DataModel上调用它,检查用户是否有效.如果用户有效,那么我想在我的登录类中引用该"登录"用户(这就是ValidateUser返回用户对象的原因).

现在,如果该用户不存在或密码错误,我只返回一个空的User对象,其id设置为-1,将其标记为不是真实用户.

这是不好的做法吗?

我该如何处理这个案子?如果ValidateUser刚刚返回一个bool它不会有问题,但因为我还需要对该用户的引用,我不知道如何做到这一点.

c#

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