我正试图找出最干净的方法来做到这一点.
目前我有一个客户对象:
public class Customer
{
public int Id {get;set;}
public string name {get;set;}
public List<Email> emailCollection {get;set}
public Customer(int id)
{
this.emailCollection = getEmails(id);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我的Email对象也很基本.
public class Email
{
private int index;
public string emailAddress{get;set;}
public int emailType{get;set;}
public Email(...){...}
public static List<Email> getEmails(int id)
{
return DataAccessLayer.getCustomerEmailsByID(id);
}
}
Run Code Online (Sandbox Code Playgroud)
DataAccessLayer当前连接到数据库,并使用SqlDataReader迭代结果集并创建新的Email对象,并将它们添加到完成时返回的List.
那么我在哪里以及如何改进呢?
我是否应该让我的DataAccessLayer返回一个DataTable并将其留给Email对象进行解析并将List返回给Customer?
我猜"工厂"可能是错误的单词,但是我应该有另一种类型的EmailFactory从DataAccessLayer获取DataTable并将List返回给Email对象吗?我想这种声音多余......
将我的Email.getEmails(id)作为静态方法,这是否是正确的做法?
我可能只是试图找到并应用最好的"模式"来完成一项简单的任务.
谢谢.
跟进
我创建了一个工作示例,其中我的域/业务对象通过现有数据库中的id提取客户记录.nhibernate中的xml映射文件非常简洁.在我按照教程设置会话和存储库工厂之后,拉动数据库记录非常简单.
但是,我注意到了巨大的性能损失.
我的原始方法由DB上的存储过程组成,该过程由DAL对象调用,该对象将结果集解析为我的域/业务对象.
我用30分钟的原始方法来获取单个客户记录.然后我用nhibernate方法计时3000ms来获取相同的记录.
我错过了什么吗?或者使用这种nhibernate路由会有很多开销吗?
否则我喜欢代码的清洁度:
protected void Page_Load(object sender, EventArgs e)
{
ICustomerRepository repository = new CustomerRepository();
Customer …Run Code Online (Sandbox Code Playgroud) 我已经尝试使用Readline()并且数据被删除,我尝试使用Read()但我不知道如何使用它的错误验证方法,因为我可能会一个接一个地获得几个数据包而我无法知道将会有另一个数据包进入.在数据包BytesToRead之间是0,所以我不能使用它.当读取数据到缓冲区时你有一个定时器或让线程进入休眠状态以允许所有数据包到达?
我搞不清楚了.不知道下一步该尝试什么.
我应该提一下,我不能保证串口的字符串将以\n或\ r或\ r \n结束.当用户按下PRINT时,我只需要一种简单的方法来读取将来自秤的所有数据包.
有人在这里回答了我喜欢的想法 - 等待所有数据包的一定时间,但他们删除了他们的答案.你有可能重新发布它吗?
我想在类上实现IXmlSerializable,只覆盖ReadXml或WriteXml,但不能同时覆盖两者.如果我没有在这个类上实现IXMLSerializable,XMLSerializer会自动序列化所有成员.我希望该默认行为适用于未覆盖的案例.但是,由于IXmlSerializable是一个接口,而不是基类,我不知道该怎么做.
另外,在一种情况下,我需要执行默认行为,并在完成时添加一些额外的代码.所以,我想覆盖并回调'基础'类行为.同样,如果有一个基类,这将是微不足道的,但由于这是一个接口,因此不是那么微不足道.
谢谢!
我不是一个数据库人,我的大部分数据库工作都是MySQL,所以请原谅我,如果这个问题中的某些内容非常天真.
我需要从一个有大约1亿行的Oracle表中删除550万行.我有一个临时表中需要删除的行的ID.如果它只是几千行,我会这样做:
DELETE FROM table_name WHERE id IN (SELECT id FROM temp_table);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
有什么我需要注意和/或做的不同,因为它是550万行?我想做一个循环,这样的事情:
DECLARE
vCT NUMBER(38) := 0;
BEGIN
FOR t IN (SELECT id FROM temp_table) LOOP
DELETE FROM table_name WHERE id = t.id;
vCT := vCT + 1;
IF MOD(vCT,200000) = 0 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
Run Code Online (Sandbox Code Playgroud)
首先 - 这是做我认为的 - 一次批量提交20万次?假设它是,我仍然不确定生成550万个SQL语句,批量提交200,000,还是有一个SQL语句并一次提交所有更好.
想法?最佳做法?
编辑:我运行了第一个选项,单个删除语句,它只需要2个小时才能完成开发.基于此,它排队等待在生产中运行.
我已经看到了一些代码,以及我的编译器生成的一些错误,这些错误**在变量之前有一个' '标记(例如**变量名未引用 - 或者其他东西,我不能完全回想起来).我相当肯定这与指针有关,如果我不得不猜测它看起来像是试图取消引用两次.' **'是相当不容易的.有人能指出我一个好的网站/文档,或者有人会在这里解释一下吗?
谢谢.
很好的回应.如果我可以添加,那么指向指针的指针有什么用呢?你不应该只使用原始指针而不是创建另一个指向原始指针的指针吗?
我们正在编写一个专门用于横向模式的应用程序.我们在根视图上使用变换将其旋转到LandscapeRight,然后由该视图加载的每个视图共享坐标系.除了我们的一个视图有一个由视图控制器加载的UIWebView对象外,这一切都很好.我们试图查看的网站没有内容填充视图.当我在横向模式下在移动Safari中查看同一站点时,它看起来是正确的.我的猜测是我们用来托管WebView的View Controller仍然认为它处于纵向模式,因为查询属性的interfaceOrientation会返回"1"...是否有办法诱骗视图/视图控制器认为它是在特定的方向?
我有一些我想要使用的数据.两个字符串和两个数字,我说8000行数据.
数据集是这里使用的最佳选择,还是我可以使用结构并拥有结构列表?
列表和数据集之间会有很大的性能差异吗?
我正在使用Git存储库来处理与我正在开发的网站相关的所有内容.存储库包含与站点相关的所有文件,包括文档,模型,原始分层图像等,以及我放在www子目录中的Web根目录.
我正准备开始整合我选择用于项目其余部分的CMS; CMS是一个开源项目,也使用Git进行管理(如果重要的话,托管在GitHub上).显然CMS需要在www子目录中,但它不会是唯一的东西 - 会有CSS文件,图像,CMS的模板等等.因此,我选择了使用子树合并策略将外部项目添加到我的存储库.因为我可能在某个时候想要修改原始项目并提供更改,我已经从GitHub克隆了CMS存储库并从我的克隆中完成了子树合并.
问题是,外部项目(即CMS)具有我想要包含的子模块.确保子模块集成到主项目中的最佳方法是什么?我是否必须为每个子模块进行子树合并?
我不太可能想要修改子模块,但我可能会有一两个子模块.
我们所有人都知道谷歌的夏季代码,但我想知道:开源软件还有其他/类似的赞助计划吗?是否可以为正在进行的开发工作提供部分资金?如果是这样,在什么条件和先决条件下?