我正在努力提高我的设计模式技巧,我很好奇这些模式之间有什么区别?所有这些看起来都是一样的 - 封装了特定实体的数据库逻辑,因此调用代码不了解底层持久层.从我的简短研究中,他们通常都会实现您的标准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种不同的方式做同样的事情似乎有点奇怪.
我试图在文件中找到一个模式.当我得到一场比赛时,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
我相信(从一些研究阅读中),在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时删除未签名的部分,或者其他什么方法?
请帮忙.
我希望在触摸特定文件时回收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",修改它不会导致此项无效.
我究竟做错了什么?
在a)windows b)linux或c)mac中开发ruby是否更好?为什么?
编辑:
我之所以这么说是因为我听说在windows中使用ruby在轨道上开发红宝石并不是那么稳定/好.(不确定,如果这是真的).
此外,David Heinemeier Hansson(Ruby on Rails的创建者)似乎正在使用Mac,因此最初的印象似乎是Ruby on Rails应用程序,而Mac则很好地融合在一起.
我昨天花了大约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为我解决了这个问题.
似乎在Vista/Windows Server 2008中使用关键部分导致操作系统无法完全恢复内存.我们在Delphi应用程序中发现了这个问题,显然是因为使用了CS API.(见这个问题)
有没有其他人用其他语言开发的应用程序(C++,...)看到它?
示例代码只是初始化10000000 CS,然后删除它们.这在XP/Win2003中运行良好,但在应用程序结束之前不会释放Vista/Win2008中的所有峰值内存.
您使用CS的次数越多,您的应用程序就会越多地保留内存.
memory-leaks critical-section windows-vista windows-server-2008
如何根据字符串获取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) 我有一个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的最终高度,因为它将取决于其中显示的项目数量.无论如何这样做?
我在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# ×2
c++ ×2
.net ×1
animation ×1
asp.net ×1
boost ×1
caching ×1
dao ×1
datamapper ×1
for-loop ×1
grep ×1
listview ×1
memory-leaks ×1
oop ×1
php ×1
powershell ×1
properties ×1
regex ×1
repository ×1
ruby ×1
stl ×1
string ×1
wpf ×1