小编Rob*_*ert的帖子

DDD和定义聚合

我们正在构建一个可以将我们的api服务出售给多家公司的系统。我们有

  • 公司(购买我们api的公司)
  • 帐户(每个公司可以有多个帐户,每个帐户都有其用户类型)
  • 用户(帐户内的用户)

从基础上看,它看起来像这样:

"company1" : {
    "accounts" : [
       account1 :{"users" : [{user1,user2}], accountType},
       account2 :{"users" : [{user1,user2}], accountType},
]}
Run Code Online (Sandbox Code Playgroud)

业务规则之一规定,用户注册后不能更改帐户。其他规则规定用户可以更改其类型,但只能在该帐户类型内。

据我了解,我的域模型应称为UserAccount,它应由Account,User和UserType实体组成,其中Account是聚合根。

class UserAccount{
  int AccountId;
  string AccountName;
  int AccountTypeId;
  List<UserTypes> AvailableUserTypesForThisAccount
  User User
  void SetUserType(userTypeId){
      if(AvailableUserTypesForThisAccount.Contains(userTypeId) == false)
         throw new NotSupportedException();

  }

}
Run Code Online (Sandbox Code Playgroud)

使用此汇总,我们可以更改用户的类型,但只能是可用于该帐户的类型(不变式之一)。

当我从存储库中获取UserAccount时,我将获取所有必要的表(或实体数据对象)并将其映射为聚合,然后将其作为整体返回。

我的理解和建模是否朝着正确的方向发展?

domain-driven-design aggregateroot

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

将 SQL Server Geography 转换为 PNG 图像

我们有一个 API,它将 MS SQL 地理类型转换为众所周知的文本,并将其发送到前端,然后将 WKT 发送到 OpenLayer 地图,后者呈现画布(边界、区域等)。

我正在寻找一种方法来减少客户端的有效负载,并将多边形、multypoligons 和地图一般转换为后端的 png。

我尝试的是将画布转换为 base64,并将其另存为 PNG。效果很好,但我需要一个完整的后端解决方案。

我尝试使用 SharpMap,但它已经很旧了,它导致了我的依赖性问题,而且我没有设法让它工作。

我找到了一个测试 SHP 文件,并尝试将其渲染到 Windows 窗体中的 PictureBox 进行测试,但我得到的只是一个空的白框。

SharpMap.Map myMap = new SharpMap.Map(new Size(600, 300));
myMap.BackColor = Color.White;
var shapeFileProvider = new SharpMap.Data.Providers.ShapeFile(@"C:\Users\test\Downloads\FRA_adm\FRA_adm1.shp", true);

SharpMap.Layers.VectorLayer myLayer = new SharpMap.Layers.VectorLayer("World Countries");
myMap.Layers.Add(myLayer);
myMap.ZoomToExtents();
myLayer.DataSource = shapeFileProvider;
pictureBox1.Image = myMap.GetMap();
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

编辑:我什至尝试过geoserver,但它看起来不支持空间地理,而只支持几何。

我需要找到一种方法将边界、区域、国家/地区转换为 c# 后端中的图像。

编辑 2:您正在使用 SHP 文件进行测试,但我真正想要的是从 Sql Server Geography 类型呈现它。

c# geography polygons openlayers sqlgeography

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

Asp.net &amp; Swagger 仅显示特定端点

默认情况下,是否可以在 swagger 中隐藏所有端点,并仅显示我用某种属性标记的端点?

c# asp.net swagger swashbuckle

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

c#条件OrderBy

我有一个Article具有以下结构的实体

public class Article
{
    public decimal Price {get;set;}
    public decimal? SalePrice {get;set;}
    public bool OnSale {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我需要做的是按照以下标准按价格查询文章:如果文章正在销售,请拿它的销售价格,如果没有,请按正常价格.

举个例子:

  • 文章A(OnSale = True,价格= 10,SalePrice = 5)
  • B条(ONSale = False,Price = 4,SalePrice = NULL)
  • C条(OnSale = False,价格= 22,SalePrice = 10)

按价格订购时,订单应该是

B(价格4)

A(价格5) - 导致它的销售价格

C(价格22)

我试过了

IQueryable<Article> articlesQuery = dal.Where<Article>(m => m.Active);
articlesQuery = articlesQuery.OrderBy(m => m.OnSale ? m.PriceSale : m.PriceSale);
Run Code Online (Sandbox Code Playgroud)

但它没有给出理想的结果.

任何帮助表示赞赏.

c# linq lambda linq-to-sql

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

是此域名还是应用程序服务

我正在使用DDD构建身份验证微服务/域,我仍然无法识别每个服务所属的位置.此时我不确定身份验证服务是属于域服务还是应用程序服务.

我应该在域serrvice中包装此行为,并通过应用程序服务公开响应对象,或者这应该保持原样 - 作为应用程序服务.

public class AuthenticationService : IAuthenticationService
    {
        IAuthUnitOfWork _uow;
        IUserRepository _userRepository;
        IUserTokenFactory _userTokenFactory;

        public AuthenticationService(IUserTokenFactory userTokenFactory, IUserRepository userRepository,
            IAuthUnitOfWork uow)
        {
            _userTokenFactory = userTokenFactory;
            _userRepository = userRepository;
            _uow = uow;
        }

        public async Task<UserTokenResponse> AuthenticateAsync(string email, string password)
        {
            var user = await _userRepository.GetByEmailAndPasswordAsync(email, password);
            //TODO: Add null check for user
            var userToken = await _userTokenFactory.CreateWithAsync(user);

            await _uow.SaveChangesAsync();

            return new UserTokenResponse
            {
                ExpiressOn = userToken.ExpiressOn,
                Token = userToken.Token
            };
        }

    }
Run Code Online (Sandbox Code Playgroud)

domain-driven-design ddd-service

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

DDD:在何处实施域服务

域服务实现应位于DDD项目结构中的什么位置?如果我们有IDomainInterfaceDomainInterface实施,应DomainInterface执行驻留在解决方案/项目的基础设施或核心/域的一部分?

domain-driven-design project-structure

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