我正在重构一个正在结束的项目的代码,最后我把很多业务逻辑放在服务类而不是域对象中.此时,大多数域对象仅是数据容器.我决定在服务对象中编写大部分业务逻辑,然后将所有内容重构为更好,更可重用和更易读的形状.这样我就可以决定应该将哪些代码放入域对象中,以及将哪些代码分解为自己的新对象,以及应该在服务类中保留哪些代码.所以我有一些代码:
public decimal CaculateBatchTotal(VendorApplicationBatch batch)
{
IList<VendorApplication> applications = AppRepo.GetByBatchId(batch.Id);
if (applications == null || applications.Count == 0)
throw new ArgumentException("There were no applications for this batch, that shouldn't be possible");
decimal total = 0m;
foreach (VendorApplication app in applications)
total += app.Amount;
return total;
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎是对域对象的一个很好的补充,因为它只有输入参数才是域对象本身.似乎是一些重构的完美候选人.但唯一的问题是该对象调用另一个对象的存储库.这让我想把它留在服务类中.
我的问题是这样的:
谢谢你的时间.
编辑注意:不能在这个上使用ORM,所以我不能使用延迟加载解决方案.
编辑注2:我不能改变构造函数来接受参数,因为将要使用反射(不是我的想法)实现域对象的方式.
编辑注3:我不相信批处理对象应该只能合计任何应用程序列表,看起来它应该只能处理该特定批处理中的应用程序.否则,将函数保留在服务类中对我来说更有意义.
我正在编写一个将输出写入文件的程序.如果此文件不存在,我想创建它.
目前,我在调用open时使用以下标志:O_WRONLY | O_CREATE
但是,当这创建文件时,它不会给我任何写入它的权限...
我如何使用open以便在不存在的情况下创建文件,但是在需要时会创建具有必要权限的文件?
谢谢!
当有ID空间时,有没有人知道如何使用jQuery通过ID选择DOM中的项目?
例如,我的项目的ID将是
<div id="content Module">Stuff</div>
Run Code Online (Sandbox Code Playgroud)
我如何用jQuery选择它?
如果我这样做
$("#content Module").whatever()
Run Code Online (Sandbox Code Playgroud)
jQuery将尝试查找包含内容ID和Module ID的项目,这不是我想要的.
我应该补充一点,我正在使用一个旧代码库,其中广泛使用这两个单词ID,因此通过并更改所有ID将是不好的.
嗨,我有以下代码将文件上传到Sharepoint.它使用HTTP PUT:
public static string UploadFile(string destUrl, string sourcePath)
{
try
{
Uri destUri = new Uri(destUrl);
FileStream inStream = File.OpenRead(sourcePath);
WebRequest req = WebRequest.Create(destUri);
req.Method = "PUT";
req.Headers.Add("Overwrite", "F");
req.Timeout = System.Threading.Timeout.Infinite;
req.Credentials = CredentialCache.DefaultCredentials;
Stream outStream = req.GetRequestStream();
string status = CopyStream(inStream, outStream);
if (status == "success")
{
outStream.Close();
WebResponse ores = req.GetResponse();
return "success";
}
else
{
return status;
}
}
catch (WebException we)
{
return we.Message;
}
catch (System.Exception ee)
{
return ee.Message;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,我得到异常: …
我有两个单选按钮,想要发布所选的一个值.如何通过jQuery获取值?
我可以像这样得到所有这些:
$("form :radio")
Run Code Online (Sandbox Code Playgroud)
我如何知道选择了哪一个?
我用Google搜索并环顾四周有没有人知道任何隐藏的宝石,这不是谷歌搜索的前几页....
sp_reset_connection似乎由SQL Server连接池调用,以确保从池中重用的连接重置其大部分设置.有没有人确切地知道它做了什么但不做什么呢?
例如,我从这篇文章中看到它没有重置事务隔离级别
对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它.
我记得读过静态方法比实例方法更快但没有得到GC的优点.它是否正确?
我不太可能改变我的设计,除非我找到一个更好的替代设计而不是速度.但仍然需要额外的信息,我想知道速度,GC等的差异.
编辑:谢谢.更多信息:假设我们有一个Person类:
class Person
Run Code Online (Sandbox Code Playgroud)
它可以有一个实例Distance方法,如:
this.Distance (Person p)
Run Code Online (Sandbox Code Playgroud)
这很好,但这并没有让我能够计算2点之间的距离(比如Point3),而不会创建Person类的实例.
我想要做的是:
class Person (no Distance methods)
Run Code Online (Sandbox Code Playgroud)
但是距离的扩展方法:
Distance (this Person, Person)
Distance (this Point3, Point3)
Run Code Online (Sandbox Code Playgroud)
这样我可以这样做:
myPerson.Distance (yourPerson)
Run Code Online (Sandbox Code Playgroud)
和
Extensions.Distance (pointA, pointB)
Run Code Online (Sandbox Code Playgroud)
EDIT2:@Jon,是的,我认为这就是所谓的(不要获得GC的优势),但我不知何故认为静态方法会产生这种负担/开销.
有人可以用人类可以理解的方式解释"Outlet"是什么吗?
c# ×3
jquery ×2
.net ×1
c ×1
c++ ×1
clr ×1
cocoa ×1
file ×1
html ×1
http ×1
javascript ×1
methods ×1
objective-c ×1
radio-button ×1
service ×1
sharepoint ×1
sql ×1
sql-server ×1
unix ×1
upload ×1