diff --git a/Cnblogs.Architecture.sln.DotSettings b/Cnblogs.Architecture.sln.DotSettings
new file mode 100644
index 0000000..67e92cc
--- /dev/null
+++ b/Cnblogs.Architecture.sln.DotSettings
@@ -0,0 +1,2 @@
+
+ True
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
index e324885..c4de60d 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -8,6 +8,8 @@
Cnblogs.Architecture
https://github.com/cnblogs/Architecture
MIT
+ https://github.com/cnblogs/Architecture
+ git
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheBehavior.cs
index ad01237..03e01b6 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheBehavior.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheBehavior.cs
@@ -1,17 +1,17 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 缓存行为定义。
+/// Options for handing .
///
public enum CacheBehavior
{
///
- /// 不存在时获取新的。
+ /// Update cache after cache missed, this is the default behavior.
///
UpdateCacheIfMiss = 1,
///
- /// 不使用缓存。
+ /// Do not cache this request.
///
DisabledCache = 2
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs
index 9668ff0..63d9bca 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestBehavior.cs
@@ -9,12 +9,12 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 对实现了 的请求进行处理。
+/// Handler for .
///
-/// 实现了 的请求。
-/// 请求的结果。
+/// Request that implements .
+/// Cached result for .
public class CacheableRequestBehavior : IPipelineBehavior
- where TRequest : ICacheableRequest, IRequest
+ where TRequest : ICachableRequest, IRequest
{
private readonly IDateTimeProvider _dateTimeProvider;
private readonly ILocalCacheProvider? _local;
@@ -23,12 +23,12 @@ public class CacheableRequestBehavior : IPipelineBehavior> _logger;
///
- /// 构建一个 。
+ /// Create .
///
- /// 缓存提供器。
- /// 时间提供器。
- /// 缓存配置项。
- /// 日志记录器。
+ /// Cache providers.
+ /// Datetime provider.
+ /// Options for cache behavior.
+ /// logger.
public CacheableRequestBehavior(
IEnumerable providers,
IDateTimeProvider dateTimeProvider,
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestOptions.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestOptions.cs
index 8bb9332..c2bdf1c 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestOptions.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CacheableRequestOptions.cs
@@ -1,22 +1,22 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 缓存配置。
+/// Options for handling .
///
public class CacheableRequestOptions
{
///
- /// 如果获取失败抛出异常。
+ /// Rethrow exception if getting cached result failed.
///
public bool ThrowIfFailedOnGet { get; set; }
///
- /// 如果更新失败则抛出异常。
+ /// Rethrow exception if updating cache failed.
///
public bool ThrowIfFailedOnUpdate { get; set; }
///
- /// 如果清除缓存失败则抛出异常,可能被 中的 覆盖。
+ /// Rethrow exception if removing cache failed, this option can be overriden by for specific type of request.
///
public bool ThrowIfFailedOnRemove { get; set; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj
index ec87da7..dd748ab 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/Cnblogs.Architecture.Ddd.Cqrs.Abstractions.csproj
@@ -1,13 +1,19 @@
-
-
-
-
-
-
-
-
-
+
+
+ Provides building blocks to archive CQRS pattern, including ICommand, IQuery, IPageableQuery, etc.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CommandResponse.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CommandResponse.cs
index e67c1f5..c9e0528 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CommandResponse.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/CommandResponse.cs
@@ -3,23 +3,26 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 命令返回的结果。
+/// Response returned by .
///
public abstract record CommandResponse : IValidationResponse, ILockableResponse
{
///
- /// 是否出现验证错误。
+ /// Check if validation fails.
///
public bool IsValidationError { get; init; }
///
- /// 是否出现并发错误。
+ /// Check if concurrent error happened.
///
public bool IsConcurrentError { get; init; }
///
- /// 错误信息。
+ /// The error message returned by handler, return empty if no error or no error message.
///
+ ///
+ /// Do not rely on this property to determine if executed successful, use for this purpose.
+ ///
public string ErrorMessage { get; init; } = string.Empty;
///
@@ -29,30 +32,30 @@ public abstract record CommandResponse : IValidationResponse, ILockableResponse
public bool LockAcquired { get; set; }
///
- /// 执行是否成功。
+ /// Check if command executed successfully.
///
- ///
+ /// Return true if executed successfully, else return false.
public virtual bool IsSuccess()
{
return IsValidationError == false && string.IsNullOrEmpty(ErrorMessage) && IsConcurrentError == false;
}
///
- /// 获取错误信息。
+ /// Get error message.
///
- ///
+ /// The error message, return if no error.
public virtual string GetErrorMessage() => ErrorMessage;
}
///
-/// 命令返回的结果。
+/// Response returned by .
///
-/// 错误枚举类型。
+/// The enumeration presenting errors.
public record CommandResponse : CommandResponse
where TError : Enumeration
{
///
- /// 构造一个 。
+ /// Create a successful .
///
public CommandResponse()
{
@@ -60,24 +63,24 @@ public CommandResponse()
}
///
- /// 构造一个 。
+ /// Create a with given error.
///
- /// 错误码。
+ /// The error.
public CommandResponse(TError errorCode)
{
ErrorCode = errorCode;
}
///
- /// 错误码。
+ /// The error returned by handler, can be null if execution succeeded.
///
public TError? ErrorCode { get; set; }
///
- /// 构造一个代表命令执行失败的
+ /// Create a failed with given error.
///
- /// 错误码。
- /// 代表命令执行失败的
+ /// The error.
+ /// A failed with given error.
public static CommandResponse Fail(TError errorCode)
{
return new CommandResponse(errorCode);
@@ -96,9 +99,9 @@ public override string GetErrorMessage()
}
///
- /// 构造一个代表命令执行成功的 。
+ /// Create a successful .
///
- /// 代表命令执行成功的
+ /// A successful .
public static CommandResponse Success()
{
return new CommandResponse();
@@ -106,67 +109,70 @@ public static CommandResponse Success()
}
///
-/// 命令返回的结果。
+/// Response returned by .
///
-/// 命令执行成功时返回的结果类型。
-/// 错误类型。
+/// The model type been returned if execution completed without error.
+/// The enumeration type representing errors.
public record CommandResponse : CommandResponse, IObjectResponse
where TError : Enumeration
{
///
- /// 构造一个 。
+ /// Create a .
///
public CommandResponse()
{
}
///
- /// 构造一个 。
+ /// Create a with given error.
///
- /// 错误码。
+ /// The error.
public CommandResponse(TError errorCode)
: base(errorCode)
{
}
///
- /// 构造一个 。
+ /// Create a with given model.
///
- /// 命令返回结果。
+ /// The execution result.
private CommandResponse(TView response)
{
Response = response;
}
///
- /// 命令执行结果。
+ /// The result been returned by command handler.
///
+ ///
+ /// This property can be null even if execution completed with no error.
+ ///
public TView? Response { get; }
///
- /// 构造一个代表执行失败的 。
+ /// Create a with given error.
///
- /// 错误码。
- ///
+ /// The error.
+ /// A with given error.
public static new CommandResponse Fail(TError errorCode)
{
return new CommandResponse(errorCode);
}
///
- /// 构造一个代表执行成功的 。
+ /// Create a with no result nor error.
///
- /// 代表执行成功的 。
+ /// The 。
public static new CommandResponse Success()
{
return new CommandResponse();
}
///
- /// 构造一个代表执行成功的 。
+ /// Create a with given result.
///
- /// 执行结果。
- ///
+ /// The model to return.
+ /// A with given result.
public static CommandResponse Success(TView view)
{
return new CommandResponse(view);
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICacheableRequest.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICachableRequest.cs
similarity index 54%
rename from src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICacheableRequest.cs
rename to src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICachableRequest.cs
index 6a22cf5..65c03fd 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICacheableRequest.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICachableRequest.cs
@@ -1,48 +1,48 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义可缓存的请求
+/// Definition for cachable request.
///
-public interface ICacheableRequest
+public interface ICachableRequest
{
///
- /// 本地缓存配置。
+ /// Configuration for local cache provider.
///
CacheBehavior LocalCacheBehavior { get; set; }
///
- /// 远程缓存配置。
+ /// Configuration for remote cache provider.
///
CacheBehavior RemoteCacheBehavior { get; set; }
///
- /// 本地缓存过期时间。
+ /// The expire time for local cache.
///
TimeSpan? LocalExpires { get; set; }
///
- /// 远程缓存过期时间。
+ /// The expire time for remote cache.
///
TimeSpan? RemoteExpires { get; set; }
///
- /// 获取缓存分组键,null 代表不分组。
+ /// Generate key for cache group, return null for no group.
///
///
string? CacheGroupKey();
///
- /// 获取缓存键。
+ /// Generate cache key for each request.
///
- ///
+ /// The cache key for current request.
string CacheKey()
{
return string.Join('-', GetCacheKeyParameters().Select(p => p?.ToString()?.ToLower()));
}
///
- /// 获取组成缓存键的参数。
+ /// Get parameters for generating cache key, will call to each object been provided.
///
- ///
+ /// The parameter array.
object?[] GetCacheKeyParameters();
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.Generic.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.Generic.cs
index a33dfd3..03ede81 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.Generic.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.Generic.cs
@@ -5,15 +5,18 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义 CQRS 中的命令相关的行为。
+/// Definitions of command in CQRS.
///
-/// 命令执行成功时返回的结果。
-/// 命令失败时返回的错误码类型。
+/// The result type for command.
+/// The error code type when command failed.
public interface ICommand : IRequest>
where TError : Enumeration
{
///
- /// 命令是否只进行验证。
+ /// Only execute validation logic.
///
+ ///
+ /// This logic must be implemented manually in command handler and not guaranteed by framework.
+ ///
public bool ValidateOnly { get; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.cs
index d26aa85..fe5f0c3 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommand.cs
@@ -5,14 +5,17 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义 CQRS 中的命令相关的行为。
+/// Definition for command.
///
-/// 命令失败时返回的错误码类型。
+/// The error type when command execution failed.
public interface ICommand : IRequest>
where TError : Enumeration
{
///
- /// 命令是否只执行验证。
+ /// Only execute validation logic.
///
+ ///
+ /// This logic must be implemented manually in command handler and not guaranteed by framework.
+ ///
public bool ValidateOnly { get; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.Generic.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.Generic.cs
index 4017321..0cb6fa8 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.Generic.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.Generic.cs
@@ -5,11 +5,11 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义 的实际处理逻辑。
+/// Definitions of handler that handles 。
///
-/// 该 Handler 能够处理的命令类型。
-/// 命令返回的结果类型。
-/// 该 Handler 返回的错误码类型。
+/// The command type for this handler.
+/// The result type for this handler.
+/// The error type for this handler.
public interface ICommandHandler : IRequestHandler>
where TCommand : ICommand
where TError : Enumeration
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.cs
index a18f28e..3212703 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ICommandHandler.cs
@@ -5,10 +5,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义 的实际处理逻辑。
+/// Definitions of handler that handles .
///
-/// 该 Handler 能够处理的命令类型。
-/// 该 Handler 返回的错误码类型。
+/// The command type for this handler.
+/// The error type for this handler.
public interface ICommandHandler : IRequestHandler>
where TCommand : ICommand
where TError : Enumeration
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IConfigurableLockableRequest.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IConfigurableLockableRequest.cs
index 5e4e8a8..0d4bbf9 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IConfigurableLockableRequest.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IConfigurableLockableRequest.cs
@@ -1,12 +1,12 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 可配置的分布式锁请求。
+/// Definitions of a with some configurations.
///
public interface IConfigurableLockableRequest : ILockableRequest
{
///
- /// 锁过期时间。
+ /// The maximum waiting time for requiring a lock.
///
TimeSpan ExpiresIn { get; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IDomainEventHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IDomainEventHandler.cs
index 4722e78..47a0f9c 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IDomainEventHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IDomainEventHandler.cs
@@ -5,9 +5,9 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 领域事件处理器。
+/// Definitions of handler for .
///
-/// 要订阅的领域事件。
+/// The domain event type for this handler to handle.
public interface IDomainEventHandler : INotificationHandler
where TDomainEvent : DomainEvent
{
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQuery.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQuery.cs
index 2a9882a..834b4b2 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQuery.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQuery.cs
@@ -3,9 +3,9 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义返回多个结果的查询。
+/// Represents a query returns a list of items.
///
-/// 查询结果类型,通常是一个列表类型。
+/// The list to return, usually a .
public interface IListQuery : IRequest
{
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQueryHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQueryHandler.cs
index 55cc1f7..981b608 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQueryHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IListQueryHandler.cs
@@ -3,10 +3,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义 的处理逻辑。
+/// Represents a handler for .
///
-/// 该 Handler 能够处理的 类型。
-/// 查询结果类型。
+/// The been handled.
+/// The result type of .
public interface IListQueryHandler : IRequestHandler
where TQuery : IListQuery
{
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableRequest.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableRequest.cs
index aebc2e4..f100b05 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableRequest.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableRequest.cs
@@ -1,13 +1,13 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义需要分布式锁的请求
+/// Represents a request that needs distributed locks.
///
public interface ILockableRequest
{
///
- /// 获取锁的 Key。
+ /// Get the key of distributed lock.
///
- ///
+ /// The key of distributed lock.
string GetLockKey();
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableResponse.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableResponse.cs
index ffaefd2..ea46f6e 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableResponse.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ILockableResponse.cs
@@ -1,17 +1,17 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 使用分布式锁后的响应。
+/// Represents response for .
///
public interface ILockableResponse
{
///
- /// 是否出现并发错误(获取不到锁)
+ /// Indicates whether lock was required successfully.
///
bool IsConcurrentError { get; init; }
///
- /// 是否成功获取到锁。
+ /// Indicates whether lock was required.
///
bool LockAcquired { get; set; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IObjectResponse.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IObjectResponse.cs
index ebb5cdc..977e027 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IObjectResponse.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IObjectResponse.cs
@@ -1,13 +1,13 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 包含结果对象的响应。
+/// Represents response that contains object result.
///
public interface IObjectResponse
{
///
- /// 获取结果。
+ /// Get object result.
///
- /// 结果。
+ /// The resulting object.
public object? GetResult();
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IOrderedQuery.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IOrderedQuery.cs
index ae81c9c..d017d68 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IOrderedQuery.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IOrderedQuery.cs
@@ -1,13 +1,14 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义返回已排序的多个结果的查询。
+/// Represents a with ordered results.
///
-/// 查询结果类型,通常是列表类型。
+/// The querying type, usually a list type.
public interface IOrderedQuery : IListQuery
{
///
- /// 排序字符串。
+ /// The string indicates the order.
///
+ /// Order by string can be like "-dateadded"(order by dateadded desc) or "id"(order by id asc).
string? OrderByString { get; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQuery.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQuery.cs
index e057140..6a2c88b 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQuery.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQuery.cs
@@ -3,13 +3,13 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义返回分页结果的查询类型。
+/// Represents a with paged results.
///
-/// 单个查询结果的类型。
+/// The type for each item in results.
public interface IPageableQuery : IOrderedQuery>
{
///
- /// 分页参数。
+ /// The paging parameters, include page index and page size.
///
PagingParams? PagingParams { get; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQueryHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQueryHandler.cs
index 5f5f154..a3dd8ed 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQueryHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IPageableQueryHandler.cs
@@ -3,10 +3,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义处理分页查询的逻辑。
+/// Represents the handler for .
///
-/// 查询类型,需要继承 。
-/// 单个查询结果类型,将返回 IPagedList<TView>。
+/// The to handle.
+/// The type for each item in .
public interface IPageableQueryHandler : IListQueryHandler>
where TQuery : IPageableQuery
{
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQuery.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQuery.cs
index 1ba6434..a61323a 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQuery.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQuery.cs
@@ -3,9 +3,9 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义获取单个结果的查询。
+/// Represents query for single item.
///
-/// 结果类型。
+/// The type of item to query.
public interface IQuery : IRequest
{
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQueryHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQueryHandler.cs
index 2b6ea41..8a17091 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQueryHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IQueryHandler.cs
@@ -3,10 +3,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义处理 的逻辑。
+/// Represents handler that handles .
///
-/// 查询类型,需要继承 。
-/// 结果类型。
+/// The type to handle.
+/// The type of item to query.
public interface IQueryHandler : IRequestHandler
where TQuery : IQuery
{
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidatable.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidatable.cs
index af66da1..98695be 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidatable.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidatable.cs
@@ -1,12 +1,12 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 定义可验证的类型。
+/// Represents a request that can be validated.
///
public interface IValidatable
{
///
- /// 验证方法,出错时返回 ,否则返回 null。
+ /// Validate the object, return if fails or null if passed.
///
ValidationError? Validate();
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidationResponse.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidationResponse.cs
index 2b1bb37..f29ad32 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidationResponse.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/IValidationResponse.cs
@@ -1,22 +1,22 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 的返回类型。
+/// Represents response for .
///
public interface IValidationResponse
{
///
- /// 验证是否失败。
+ /// Indicates whether validation is failed.
///
bool IsValidationError { get; init; }
///
- /// 错误信息。
+ /// Contain error message if validation fails.
///
string ErrorMessage { get; init; }
///
- /// 错误信息对象。
+ /// The validation results, null if validation was passed.
///
ValidationError? ValidationError { get; init; }
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequest.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequest.cs
index 1b89624..e7037d7 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequest.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequest.cs
@@ -3,9 +3,12 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 清除缓存请求。
+/// Represents request to invalid caches.
///
+/// The request that been cached.
+/// Invalid cache for the group that was in.
+/// Throw exceptions if fails, overrides same options in .
public record InvalidCacheRequest(
- ICacheableRequest Request,
+ ICachableRequest Request,
bool InvalidWholeGroup = false,
bool? ThrowIfFailed = null) : IRequest;
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequestHandler.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequestHandler.cs
index dd963ed..2e12696 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequestHandler.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/InvalidCacheRequestHandler.cs
@@ -9,7 +9,7 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 清除缓存。
+/// The default handler for .
///
public class InvalidCacheRequestHandler : IRequestHandler
{
@@ -20,12 +20,12 @@ public class InvalidCacheRequestHandler : IRequestHandler
private readonly ILogger _logger;
///
- /// 构建一个 。
+ /// Create a .
///
- /// 缓存提供器。
- /// 时间提供器。
- /// 缓存配置。
- /// 日志记录器。
+ /// Cache providers.
+ /// Datetime providers.
+ /// Cache options.
+ /// log provider.
public InvalidCacheRequestHandler(
IEnumerable providers,
IDateTimeProvider dateTimeProvider,
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LockableRequestBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LockableRequestBehavior.cs
index f041178..0662600 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LockableRequestBehavior.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LockableRequestBehavior.cs
@@ -7,10 +7,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 处理需要分布式锁的请求。
+/// Handle requests that require distributed lock.
///
-/// 请求类型。
-/// 响应类型。
+/// The type of request.
+/// The type of response.
public class LockableRequestBehavior : IPipelineBehavior
where TRequest : ILockableRequest, IRequest
where TResponse : ILockableResponse, new()
@@ -19,10 +19,10 @@ public class LockableRequestBehavior : IPipelineBehavior> _logger;
///
- /// 创建一个新的 实例。
+ /// Create a new instance.
///
- /// 分布式锁提供器。
- /// 日志记录器。
+ /// Distributed lock provider.
+ /// log provider.
public LockableRequestBehavior(
IDistributedLockProvider distributedLockProvider,
ILogger> logger)
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LoggingBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LoggingBehavior.cs
index 14de343..1ff65d5 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LoggingBehavior.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/LoggingBehavior.cs
@@ -5,19 +5,19 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 记录命令/查询日志
+/// Middleware for logging requests and events.
///
-/// 请求类型。
-/// 返回类型。
+/// The type of request.
+/// The type of response.
public class LoggingBehavior : IPipelineBehavior
where TRequest : IRequest
{
private readonly ILogger> _logger;
///
- /// 新建一个 类型的实例。
+ /// Create a new instance.
///
- /// 日志记录器。
+ /// Log provider.
public LoggingBehavior(ILogger> logger)
{
_logger = logger;
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/PageableQueryHandlerBase.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/PageableQueryHandlerBase.cs
index da0e68c..a6bf8a0 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/PageableQueryHandlerBase.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/PageableQueryHandlerBase.cs
@@ -5,11 +5,11 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 用于实现 的基类。
+/// Base class for implementing .
///
-/// 查询类型。
-/// 实体类型。
-/// 返回类型。
+/// The type of query.
+/// The type of entity to query.
+/// The type of projected view model.
public abstract class PageableQueryHandlerBase : IPageableQueryHandler
where TQuery : IPageableQuery
{
@@ -45,54 +45,54 @@ public async Task> Handle(TQuery request, CancellationToken can
}
///
- /// 获取总数的查询。
+ /// Query for total count.
///
- /// 查询条件。
- /// 过滤好的 。
- /// 总数。
+ /// The query parameters.
+ /// Filtered .
+ /// The total count of items.
protected abstract Task CountAsync(TQuery query, IQueryable queryable);
///
- /// 默认的排序条件,如果没有指定 ,将会使用这一语句。
+ /// The default order by field, used when is not present.
///
- /// 查询条件。
- /// 返回的。
- /// 排序好的 。
+ /// The query parameters.
+ /// returned by .
+ /// Ordered .
protected abstract IQueryable DefaultOrderBy(TQuery query, IQueryable queryable);
///
- /// 获取并过滤,返回
+ /// Create queryable and apply filter, return filtered .
///
- /// 输入的查询条件。
- /// 过滤后的 。
+ /// The query parameter.
+ /// Filtered .
protected abstract IQueryable Filter(TQuery query);
///
- /// 获取并过滤,返回
+ /// Create queryable and apply filter asynchronously, return filtered .
///
- /// 输入的查询条件。
- /// 过滤后的 。
+ /// The query parameter.
+ /// Filtered .
protected virtual Task> FilterAsync(TQuery query)
{
return Task.FromResult(Filter(query));
}
///
- /// 投射结果,返回 。
+ /// Project item to view model, return projected .
///
- /// 查询条件。
- /// 过滤并排序完成的 。
- /// 投射好的 。
+ /// The query parameter.
+ /// Filtered and ordered .
+ /// Projected .
protected virtual IQueryable ProjectToView(TQuery query, IQueryable queryable)
{
return queryable.ProjectToType();
}
///
- /// 执行实际的查询。
+ /// Execute query and projections, get the actual results.
///
- /// 查询条件。
- /// 投射好的
- /// 查询结果。
+ /// The query parameter.
+ /// Projected .
+ /// The query result.
protected abstract Task> ToListAsync(TQuery query, IQueryable queryable);
}
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationBehavior.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationBehavior.cs
index 2ab3998..ac5760c 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationBehavior.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationBehavior.cs
@@ -5,10 +5,10 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 对实现了 的 进行验证。
+/// Validate requests that implements .
///
-/// 请求类型。
-/// 结果类型。
+/// The type of request.
+/// The type of response.
public class ValidationBehavior : IPipelineBehavior
where TRequest : IValidatable, IRequest
where TResponse : IValidationResponse, new()
@@ -16,9 +16,9 @@ public class ValidationBehavior : IPipelineBehavior> _logger;
///
- /// 构造一个 。
+ /// Create a new .
///
- ///
+ /// The log provider.
public ValidationBehavior(ILogger> logger)
{
_logger = logger;
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationError.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationError.cs
index 37df214..6ba218b 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationError.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.Abstractions/ValidationError.cs
@@ -1,8 +1,8 @@
namespace Cnblogs.Architecture.Ddd.Cqrs.Abstractions;
///
-/// 验证错误。
+/// A Validation error returned by .
///
-/// 错误信息。
-/// 参数名称。
+/// The error message.
+/// The parameter name that failed to validate.
public record ValidationError(string Message, string? ParameterName);
\ No newline at end of file
diff --git a/src/Cnblogs.Architecture.Ddd.Cqrs.DependencyInjection/CqrsInjector.cs b/src/Cnblogs.Architecture.Ddd.Cqrs.DependencyInjection/CqrsInjector.cs
index 1e6ad67..0339bd5 100644
--- a/src/Cnblogs.Architecture.Ddd.Cqrs.DependencyInjection/CqrsInjector.cs
+++ b/src/Cnblogs.Architecture.Ddd.Cqrs.DependencyInjection/CqrsInjector.cs
@@ -65,7 +65,7 @@ public CqrsInjector AddDistributionLock()
}
///
- /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
+ /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
///
/// 本地缓存提供器。
/// 缓存配置。
@@ -79,7 +79,7 @@ public CqrsInjector AddLocalQueryCache(Action?
}
///
- /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
+ /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
///
/// 本地缓存提供器。
/// 远程缓存提供器。
@@ -96,7 +96,7 @@ public CqrsInjector AddQueryCache(Action
- /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
+ /// 启用缓存中间件,自动处理和缓存实现了 接口的请求。
///
/// 远程缓存提供器。
/// 缓存配置。
diff --git a/src/Directory.Build.props b/src/Directory.Build.props
index ac09a8e..4f3a0f4 100644
--- a/src/Directory.Build.props
+++ b/src/Directory.Build.props
@@ -4,6 +4,16 @@
true
+ true
+ true
+ snupkg
+
+ Please check release notes at: https://github.com/cnblogs/Architecture/releases
+
+
+
+
+
diff --git a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs
index d500b30..fbbce30 100644
--- a/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs
+++ b/test/Cnblogs.Architecture.IntegrationTests/DaprTests.cs
@@ -10,10 +10,6 @@ namespace Cnblogs.Architecture.IntegrationTests;
public class DaprTests
{
- public DaprTests()
- {
- }
-
[Fact]
public async Task Dapr_SubscribeEndpoint_OkAsync()
{
diff --git a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs
index 1a5b5db..a80151c 100644
--- a/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs
+++ b/test/Cnblogs.Architecture.UnitTests/Cqrs/Behaviors/CacheBehaviorTests.cs
@@ -251,7 +251,7 @@ public void CacheBehavior_NoProvider_Throw()
private static CacheableRequestBehavior GetBehavior(
List providers,
Action? optionConfigure = null)
- where TRequest : ICacheableRequest, IRequest
+ where TRequest : ICachableRequest, IRequest
{
var option = new CacheableRequestOptions();
optionConfigure?.Invoke(option);
diff --git a/test/Cnblogs.Architecture.UnitTests/Cqrs/FakeObjects/FakeQuery.cs b/test/Cnblogs.Architecture.UnitTests/Cqrs/FakeObjects/FakeQuery.cs
index e6fefc9..cb329df 100644
--- a/test/Cnblogs.Architecture.UnitTests/Cqrs/FakeObjects/FakeQuery.cs
+++ b/test/Cnblogs.Architecture.UnitTests/Cqrs/FakeObjects/FakeQuery.cs
@@ -4,7 +4,7 @@
namespace Cnblogs.Architecture.UnitTests.Cqrs.FakeObjects;
-public class FakeQuery : ICacheableRequest, IRequest, IValidatable
+public class FakeQuery : ICachableRequest, IRequest, IValidatable
{
private readonly string? _cacheGroupKey;
private readonly string _cacheKey;