-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDataAccessModelCommand.cs
More file actions
130 lines (121 loc) · 5.25 KB
/
DataAccessModelCommand.cs
File metadata and controls
130 lines (121 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// =================================================================================================================================
// Copyright (c) RapidField LLC. Licensed under the MIT License. See LICENSE.txt in the project root for license information.
// =================================================================================================================================
using RapidField.SolidInstruments.Core;
using RapidField.SolidInstruments.Core.ArgumentValidation;
using System;
using System.Diagnostics;
using System.Runtime.Serialization;
namespace RapidField.SolidInstruments.DataAccess
{
/// <summary>
/// Represents a command to perform an action related to a data access model.
/// </summary>
/// <remarks>
/// <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel}" /> is the default implementation of
/// <see cref="IDataAccessModelCommand{TIdentifier, TDataAccessModel}" />.
/// </remarks>
/// <typeparam name="TIdentifier">
/// The type of the unique primary identifier for the data access model.
/// </typeparam>
/// <typeparam name="TDataAccessModel">
/// The type of the associated data access model.
/// </typeparam>
[DataContract]
public abstract class DataAccessModelCommand<TIdentifier, TDataAccessModel> : DataAccessModelCommand<TIdentifier, TDataAccessModel, Nix>, IDataAccessModelCommand<TIdentifier, TDataAccessModel>
where TIdentifier : IComparable, IComparable<TIdentifier>, IEquatable<TIdentifier>
where TDataAccessModel : class, IDataAccessModel<TIdentifier>
{
/// <summary>
/// Initializes a new instance of the <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel}" /> class.
/// </summary>
protected DataAccessModelCommand()
: base()
{
Model = null;
}
/// <summary>
/// Initializes a new instance of the <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel}" /> class.
/// </summary>
/// <param name="model">
/// The associated data access model.
/// </param>
/// <exception cref="ArgumentNullException">
/// <paramref name="model" /> is <see langword="null" />.
/// </exception>
protected DataAccessModelCommand(TDataAccessModel model)
: base(model.RejectIf().IsNull(nameof(model)).TargetArgument.Identifier)
{
Model = model;
}
/// <summary>
/// Gets or sets the associated <see cref="IDataAccessModel{TIdentifier}" />.
/// </summary>
[DataMember]
public TDataAccessModel Model
{
get;
set;
}
}
/// <summary>
/// Represents a command to perform an action related to a data access model.
/// </summary>
/// <remarks>
/// <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel, TResult}" /> is the default implementation of
/// <see cref="IDataAccessModelCommand{TIdentifier, TDataAccessModel, TResult}" />.
/// </remarks>
/// <typeparam name="TIdentifier">
/// The type of the unique primary identifier for the data access model.
/// </typeparam>
/// <typeparam name="TDataAccessModel">
/// The type of the associated data access model.
/// </typeparam>
/// <typeparam name="TResult">
/// The type of the result that is produced by handling the data access model command.
/// </typeparam>
[DataContract]
public abstract class DataAccessModelCommand<TIdentifier, TDataAccessModel, TResult> : DataAccessCommand<TResult>, IDataAccessModelCommand<TIdentifier, TDataAccessModel, TResult>
where TIdentifier : IComparable, IComparable<TIdentifier>, IEquatable<TIdentifier>
where TDataAccessModel : class, IDataAccessModel<TIdentifier>
{
/// <summary>
/// Initializes a new instance of the <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel, TResult}" /> class.
/// </summary>
protected DataAccessModelCommand()
: this(default)
{
return;
}
/// <summary>
/// Initializes a new instance of the <see cref="DataAccessModelCommand{TIdentifier, TDataAccessModel, TResult}" /> class.
/// </summary>
/// <param name="modelIdentifier">
/// A value that uniquely identifies the associated data access model.
/// </param>
protected DataAccessModelCommand(TIdentifier modelIdentifier)
: base()
{
ModelIdentifier = modelIdentifier;
}
/// <summary>
/// Gets or sets a value that uniquely identifies the associated <see cref="IDataAccessModel{TIdentifier}" />.
/// </summary>
[DataMember]
public TIdentifier ModelIdentifier
{
get;
set;
}
/// <summary>
/// Gets the type of the associated data access model.
/// </summary>
[IgnoreDataMember]
public Type ModelType => ModelTypeReference;
/// <summary>
/// Represents the type of the associated data access model.
/// </summary>
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private static readonly Type ModelTypeReference = typeof(TDataAccessModel);
}
}