问题列表 - 第5450页

在域驱动设计中,在域对象中调用其他对象的repostiories会违反DDD吗?

我正在重构一个正在结束的项目的代码,最后我把很多业务逻辑放在服务类而不是域对象中.此时,大多数域对象仅是数据容器.我决定在服务对象中编写大部分业务逻辑,然后将所有内容重构为更好,更可重用和更易读的形状.这样我就可以决定应该将哪些代码放入域对象中,以及将哪些代码分解为自己的新对象,以及应该在服务类中保留哪些代码.所以我有一些代码:

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)

这段代码似乎是对域对象的一个​​很好的补充,因为它只有输入参数才是域对象本身.似乎是一些重构的完美候选人.但唯一的问题是该对象调用另一个对象的存储库.这让我想把它留在服务类中.

我的问题是这样的:

  1. 你会把这段代码放在哪里?
  2. 你会打破这个功能吗?
  3. 那些遵循严格的领域驱动设计的人会把它放在哪里?
  4. 为什么?

谢谢你的时间.

编辑注意:不能在这个上使用ORM,所以我不能使用延迟加载解决方案.

编辑注2:我不能改变构造函数来接受参数,因为将要使用反射(不是我的想法)实现域对象的方式.

编辑注3:我不相信批处理对象应该只能合计任何应用程序列表,看起来它应该只能处理该特定批处理中的应用程序.否则,将函数保留在服务类中对我来说更有意义.

c# service design-patterns domain-driven-design

8
推荐指数
2
解决办法
1579
查看次数

使用open()系统调用

我正在编写一个将输出写入文件的程序.如果此文件不存在,我想创建它.

目前,我在调用open时使用以下标志:O_WRONLY | O_CREATE

但是,当这创建文件时,它不会给我任何写入它的权限...

我如何使用open以便在不存在的情况下创建文件,但是在需要时会创建具有必要权限的文件?

谢谢!

c unix file

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

带空格的jquery ID

当有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将是不好的.

jquery

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

使用HTTP PUT将文件上载到Sharepoint(WSS 3.0)文档库

嗨,我有以下代码将文件上传到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)

当我运行此代码时,我得到异常: …

c# upload sharepoint http

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

我怎么知道通过jQuery选择了哪个单选按钮?

我有两个单选按钮,想要发布所选的一个值.如何通过jQuery获取值?

我可以像这样得到所有这些:

$("form :radio")
Run Code Online (Sandbox Code Playgroud)

我如何知道选择了哪一个?

html javascript jquery jquery-selectors radio-button

2583
推荐指数
26
解决办法
208万
查看次数

我在哪里可以找到流利的NHibernate教程?

我用Google搜索并环顾四周有没有人知道任何隐藏的宝石,这不是谷歌搜索的前几页....

fluent-nhibernate

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

好的c ++ lib用于线程化

我更喜欢仅基于pthreads的lib.什么是一个很好的c ++ lib来进行线程化?

c++ multithreading

4
推荐指数
2
解决办法
2813
查看次数

sp_reset_connection有什么作用?

sp_reset_connection似乎由SQL Server连接池调用,以确保从池中重用的连接重置其大部分设置.有没有人确切地知道它做了什么但不做什么呢?

例如,我从这篇文章中看到它没有重置事务隔离级别

sql sql-server connection-pooling

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

C#中的静态方法与实例方法

对于我正在编写的应用程序,我希望具有极端的可扩展性,并且扩展方法似乎能够提供我想要的内容,以及在没有实例的情况下调用它们的能力,我也需要它.

我记得读过静态方法比实例方法更快但没有得到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的优势),但我不知何故认为静态方法会产生这种负担/开销.

.net c# methods clr garbage-collection

6
推荐指数
3
解决办法
2万
查看次数

14
推荐指数
5
解决办法
9519
查看次数