ã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒãã«çŠç¹ãåœãŠãæ±çšã³ãã³ããã¿ãŒã³ã解説ããããŸããŸãªåœéçãªãœãããŠã§ã¢éçºã®ç¶æ³ã§é©çšå¯èœãªå ç¢ã§ä¿å®ãããããœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
æ±çšã³ãã³ããã¿ãŒã³ïŒå€æ§ãªã¢ããªã±ãŒã·ã§ã³ã«ãããã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒããå®çŸ
ã³ãã³ããã¿ãŒã³ã¯ããªã¯ãšã¹ãããªããžã§ã¯ããšããŠã«ãã»ã«åããè¡åãã¶ã€ã³ãã¿ãŒã³ã§ãããããã«ãã£ãŠãã¯ã©ã€ã¢ã³ããããŸããŸãªãªã¯ãšã¹ãã§ãã©ã¡ãŒã¿åãããããªã¯ãšã¹ãããã¥ãŒã«å ¥ããããã°ã«èšé²ããããã¢ã³ãã¥å¯èœãªæäœããµããŒããããã§ããŸãããã®ãã¿ãŒã³ã¯ãé«åºŠãªæè»æ§ãä¿å®æ§ãããã³æ¡åŒµæ§ãå¿ èŠãšããã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãããã ããäžè¬çãªèª²é¡ã¯ãããŸããŸãªã³ãã³ãã¢ã¯ã·ã§ã³ãæ±ãéã«ã¿ã€ãã»ãŒãã確ä¿ããããšã§ãããã®ããã°æçš¿ã§ã¯ãã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒãã«éç¹ã眮ããæ±çšã³ãã³ããã¿ãŒã³ã®å®è£ ã«ã€ããŠè©³ãã説æããå¹ åºãåœéçãªãœãããŠã§ã¢éçºãããžã§ã¯ãã«é©ãããã®ã«ããŸãã
ã³ã¢ã³ãã³ããã¿ãŒã³ã®çè§£
ãã®æ žå¿ã«ãããŠãã³ãã³ããã¿ãŒã³ã¯ãæäœãåŒã³åºããªããžã§ã¯ãïŒã€ã³ããŒã«ãŒïŒããæäœã®å®è¡æ¹æ³ãç¥ã£ãŠãããªããžã§ã¯ãïŒã¬ã·ãŒããŒïŒããåé¢ããŸããã€ã³ã¿ãŒãã§ãŒã¹ã¯ãéåžžãCommandããšåŒã°ãããã¹ãŠã®å ·è±¡ã³ãã³ãã¯ã©ã¹ãå®è£ ããã¡ãœããïŒå€ãã®å ŽåãExecuteãïŒãå®çŸ©ããŸããã€ã³ããŒã«ãŒã¯ã³ãã³ããªããžã§ã¯ããä¿æãããªã¯ãšã¹ããåŠçããå¿ èŠããããšãã«ãã®ãExecuteãã¡ãœãããåŒã³åºããŸãã
åŸæ¥ã®ã³ãã³ããã¿ãŒã³ã®äŸã«ã¯ãã©ã€ãã®å¶åŸ¡ãå«ãŸããå ŽåããããŸãã
åŸæ¥ã®ã³ãã³ããã¿ãŒã³ã®äŸïŒæŠå¿µçïŒ
- Commandã€ã³ã¿ãŒãã§ãŒã¹ïŒ`Execute()`ã¡ãœãããå®çŸ©ããŸãã
- å ·è±¡ã³ãã³ãïŒ`TurnOnLightCommand`ã`TurnOffLightCommand`ã¯ã`Command`ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ãã`Light`ãªããžã§ã¯ãã«å§è²ããŸãã
- ã¬ã·ãŒããŒïŒ`Light`ãªããžã§ã¯ããèªèº«ããªã³/ãªãã«ããæ¹æ³ãç¥ã£ãŠããŸãã
- ã€ã³ããŒã«ãŒïŒ`Command`ãä¿æãããã®`Execute()`ã¡ãœãããåŒã³åºã`RemoteControl`ãªããžã§ã¯ãã
广çã§ããããã®ã¢ãããŒãã¯ã倿°ã®ç°ãªãã³ãã³ããæ±ãå Žåã«ç ©éã«ãªãå¯èœæ§ããããŸããæ°ããã³ãã³ãã远å ããã«ã¯ãå€ãã®å Žåãæ°ããã¯ã©ã¹ãäœæããæ¢åã®ã€ã³ããŒã«ãŒããžãã¯ã倿Žããå¿ èŠããããŸããããã«ãã¿ã€ãã»ãŒãã確ä¿ããããšãã€ãŸãæ£ããããŒã¿ãæ£ããã³ãã³ãã«æž¡ãããããã«ããããšã¯å°é£ãªå ŽåããããŸãã
æ±çšã³ãã³ããã¿ãŒã³ïŒæè»æ§ãšã¿ã€ãã»ãŒãã®åŒ·å
æ±çšã³ãã³ããã¿ãŒã³ã¯ãã³ãã³ãã€ã³ã¿ãŒãã§ãŒã¹ãšå ·è±¡ã³ãã³ãå®è£ ã®äž¡æ¹ã«ãžã§ããªãã¯åãå°å ¥ããããšã«ããããããã®å¶éã«å¯ŸåŠããŸããããã«ãããã³ãã³ããæäœããããŒã¿ã®åã§ã³ãã³ãããã©ã¡ãŒã¿åã§ãããããã¿ã€ãã»ãŒããå€§å¹ ã«åäžãããã€ã©ãŒãã¬ãŒãã³ãŒããåæžãããŸãã
æ±çšã³ãã³ããã¿ãŒã³ã®äž»èŠãªæŠå¿µ
- ãžã§ããªãã¯ã³ãã³ãã€ã³ã¿ãŒãã§ãŒã¹ïŒ`Command`ã€ã³ã¿ãŒãã§ãŒã¹ã¯ãå®è¡ãããã¢ã¯ã·ã§ã³ã®åã衚ãå`T`ã§ãã©ã¡ãŒã¿åãããŸããããã«ã¯éåžžã`Execute(T action)`ã¡ãœãããå«ãŸããŸãã
- ã¢ã¯ã·ã§ã³ã¿ã€ãïŒã¢ã¯ã·ã§ã³ã衚ãããŒã¿æ§é ãå®çŸ©ããŸããããã¯ãåçŽãªåæåãããè€éãªã¯ã©ã¹ããŸãã¯é¢æ°åã€ã³ã¿ãŒãã§ãŒã¹/ããªã²ãŒãã§ããããåŸãŸãã
- å ·è±¡ãžã§ããªãã¯ã³ãã³ãïŒãžã§ããªãã¯`Command`ã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããç¹å®ã®ã¢ã¯ã·ã§ã³ã¿ã€ãã«ç¹åãããŸããæäŸãããã¢ã¯ã·ã§ã³ã«åºã¥ããŠå®è¡ããžãã¯ãåŠçããŸãã
- ã³ãã³ããã¡ã¯ããªïŒãªãã·ã§ã³ïŒïŒãã¡ã¯ããªã¯ã©ã¹ã䜿çšããŠãã¢ã¯ã·ã§ã³ã¿ã€ãã«åºã¥ããŠå ·è±¡ãžã§ããªãã¯ã³ãã³ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ããŸããããã«ãããã€ã³ããŒã«ãŒãã³ãã³ãå®è£ ããããã«åé¢ãããŸãã
å®è£ äŸïŒC#ïŒ
ã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒããå®çŸããæ¹æ³ã瀺ãC#ã®äŸã§ããã説æããŸããããããã¥ã¡ã³ãã®äœæãæŽæ°ãåé€ãªã©ãããŸããŸãªããã¥ã¡ã³ãæäœãåŠçããã·ã¹ãã ãããã·ããªãªãèããŠã¿ãŸããããåæåã䜿çšããŠã¢ã¯ã·ã§ã³ã¿ã€ãã衚ããŸãã
public enum DocumentActionType
{
Create,
Update,
Delete
}
public class DocumentAction
{
public DocumentActionType ActionType { get; set; }
public string DocumentId { get; set; }
public string Content { get; set; }
}
public interface ICommand<T>
{
void Execute(T action);
}
public class CreateDocumentCommand : ICommand<DocumentAction>
{
private readonly IDocumentService _documentService;
public CreateDocumentCommand(IDocumentService documentService)
{
_documentService = documentService ?? throw new ArgumentNullException(nameof(documentService));
}
public void Execute(DocumentAction action)
{
if (action.ActionType != DocumentActionType.Create) throw new ArgumentException("Invalid action type for this command.");
_documentService.CreateDocument(action.Content);
}
}
public class UpdateDocumentCommand : ICommand<DocumentAction>
{
private readonly IDocumentService _documentService;
public UpdateDocumentCommand(IDocumentService documentService)
{
_documentService = documentService ?? throw new ArgumentNullException(nameof(documentService));
}
public void Execute(DocumentAction action)
{
if (action.ActionType != DocumentActionType.Update) throw new ArgumentException("Invalid action type for this command.");
_documentService.UpdateDocument(action.DocumentId, action.Content);
}
}
public interface IDocumentService
{
void CreateDocument(string content);
void UpdateDocument(string documentId, string content);
void DeleteDocument(string documentId);
}
public class DocumentService : IDocumentService
{
public void CreateDocument(string content)
{
Console.WriteLine($"Creating document with content: {content}");
}
public void UpdateDocument(string documentId, string content)
{
Console.WriteLine($"Updating document {documentId} with content: {content}");
}
public void DeleteDocument(string documentId)
{
Console.WriteLine($"Deleting document {documentId}");
}
}
public class CommandInvoker
{
private readonly Dictionary<DocumentActionType, Func<IDocumentService, ICommand<DocumentAction>>> _commands;
private readonly IDocumentService _documentService;
public CommandInvoker(IDocumentService documentService)
{
_documentService = documentService;
_commands = new Dictionary<DocumentActionType, Func<IDocumentService, ICommand<DocumentAction>>>
{
{ DocumentActionType.Create, service => new CreateDocumentCommand(service) },
{ DocumentActionType.Update, service => new UpdateDocumentCommand(service) },
// Add Delete command similarly
};
}
public void Invoke(DocumentAction action)
{
if (_commands.TryGetValue(action.ActionType, out var commandFactory))
{
var command = commandFactory(_documentService);
command.Execute(action);
}
else
{
Console.WriteLine($"No command found for action type: {action.ActionType}");
}
}
}
// Usage
public class Example
{
public static void Main(string[] args)
{
var documentService = new DocumentService();
var invoker = new CommandInvoker(documentService);
var createAction = new DocumentAction { ActionType = DocumentActionType.Create, Content = "Initial document content" };
invoker.Invoke(createAction);
var updateAction = new DocumentAction { ActionType = DocumentActionType.Update, DocumentId = "123", Content = "Updated content" };
invoker.Invoke(updateAction);
}
}
説æ
DocumentActionTypeïŒå¯èœãªããã¥ã¡ã³ãæäœãå®çŸ©ããåæåãDocumentActionïŒã¢ã¯ã·ã§ã³ã®åãšé¢é£ããŒã¿ïŒããã¥ã¡ã³ãIDãã³ã³ãã³ãïŒãä¿æããã¯ã©ã¹ãICommand<DocumentAction>ïŒDocumentActionåã§ãã©ã¡ãŒã¿åããããžã§ããªãã¯ã³ãã³ãã€ã³ã¿ãŒãã§ãŒã¹ãCreateDocumentCommandãšUpdateDocumentCommandïŒç¹å®ã®ããã¥ã¡ã³ãæäœãåŠçããå ·è±¡ã³ãã³ãå®è£ ãå®éã®æäœãå®è¡ããããã®`IDocumentService`ã®äŸåæ§æ³šå ¥ã«æ³šæããŠãã ãããåã³ãã³ãã¯ã`ActionType`ããã§ãã¯ããŠãæ£ããäœ¿çšæ³ãä¿èšŒããŸããCommandInvokerïŒãã£ã¯ã·ã§ããªã䜿çšããŠãDocumentActionTypeãã³ãã³ããã¡ã¯ããªã«ãããããŸããããã«ãããççµåãä¿é²ãããã€ã³ããŒã«ãŒã®ã³ã¢ããžãã¯ã倿Žããã«æ°ããã³ãã³ããç°¡åã«è¿œå ã§ããŸãã
ã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒããåããæ±çšã³ãã³ããã¿ãŒã³ã®å©ç¹
- ã¿ã€ãã»ãŒãã®åäžïŒãžã§ããªãã¯ã¹ã䜿çšããããšã§ãã³ã³ãã€ã«æã®åãã§ãã¯ã匷å¶ããã©ã³ã¿ã€ã ãšã©ãŒã®ãªã¹ã¯ã軜æžããŸãã
- ãã€ã©ãŒãã¬ãŒãã®åæžïŒãžã§ããªãã¯ã¢ãããŒãã«ãããã³ãã³ããå®è£ ããããã«å¿ èŠãªã³ãŒãã®éãåæžãããŸããã³ãã³ãã®ããããªããªãšãŒã·ã§ã³ããšã«åå¥ã®ã¯ã©ã¹ãäœæããå¿ èŠããªãããã§ãã
- æè»æ§ã®åäžïŒæ°ããã³ãã³ãã®è¿œå ãç°¡åã«ãªããŸããæ°ããã³ãã³ãã¯ã©ã¹ãå®è£ ãããããã³ãã³ããã¡ã¯ããªãŸãã¯ã€ã³ããŒã«ãŒã«ç»é²ããã ãã§æžã¿ãŸãã
- ä¿å®æ§ã®åäžïŒé¢å¿ã®æç¢ºãªåé¢ãšãžã§ããªãã¯ã¹ã®äœ¿çšã«ãããã³ãŒãã®çè§£ãšä¿å®ã容æã«ãªããŸãã
- Undo/Redoã®ãµããŒãïŒã³ãã³ããã¿ãŒã³ã¯æ¬è³ªçã«Undo/Redoæ©èœããµããŒãããŠãããããã¯å€ãã®ã¢ããªã±ãŒã·ã§ã³ã§éèŠã§ããåã³ãã³ãã®å®è¡ã¯å±¥æŽã«ä¿åã§ãããããæäœãç°¡åã«å ã«æ»ãããšãã§ããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«é¢ããèæ ®äºé
ã°ããŒãã«ãªãŒãã£ãšã³ã¹ã察象ãšããã¢ããªã±ãŒã·ã§ã³ã§æ±çšã³ãã³ããã¿ãŒã³ãå®è£ ããå Žåã¯ãããã€ãã®èŠçŽ ãèæ ®ããå¿ èŠããããŸãã
1. åœéåãšããŒã«ãªãŒãŒã·ã§ã³ïŒi18n/l10nïŒ
ã³ãã³ãå ã®ãŠãŒã¶ãŒåãã¡ãã»ãŒãžãŸãã¯ããŒã¿ãé©åã«åœéåããã³ããŒã«ã©ã€ãºãããŠããããšã確èªããŸããããã«ã¯ã以äžãå«ãŸããŸãã
- æååã®å€éšåïŒãã¹ãŠã®ãŠãŒã¶ãŒåãæååããç°ãªãèšèªã«ç¿»èš³ã§ãããªãœãŒã¹ãã¡ã€ã«ã«æ ŒçŽããŸãã
- æ¥ä»ãšæå»ã®ãã©ãŒãããïŒã«ã«ãã£åºæã®æ¥ä»ãšæå»ã®ãã©ãŒãããã䜿çšããŠãæ¥ä»ãšæå»ãç°ãªãå°åã§æ£ãã衚瀺ãããããã«ããŸããããšãã°ãç±³åœã®æ¥ä»åœ¢åŒã¯éåžžMM/DD/YYYYã§ããããšãŒãããã§ã¯å€ãã®å ŽåDD/MM/YYYYã§ãã
- é貚ã®ãã©ãŒãããïŒã«ã«ãã£åºæã®é貚ã®ãã©ãŒãããã䜿çšããŠãé貚å€ãæ£ãã衚瀺ããŸããããã«ã¯ãé貚èšå·ãå°æ°ç¹åºåãæåãããã³æ¡åºåãæåãå«ãŸããŸãã
- æ°å€ã®ãã©ãŒãããïŒããŒã»ã³ããŒãžã枬å®å€ãªã©ãä»ã®æ°å€ã«å¯ŸããŠã«ã«ãã£åºæã®æ°å€ã®ãã©ãŒãããã䜿çšããŸãã
ããšãã°ãã¡ãŒã«ãéä¿¡ããã³ãã³ããèããŠã¿ãŸããããã¡ãŒã«ã®ä»¶åãšæ¬æã¯ãè€æ°ã®èšèªããµããŒãããããã«åœéåããå¿ èŠããããŸãã .NETã®ãªãœãŒã¹ç®¡çã·ã¹ãã ãJavaã®ResourceBundleãªã©ã®ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ããã®ç®çã«äœ¿çšã§ããŸãã
2. ã¿ã€ã ãŸãŒã³
æéäŸåã®ã³ãã³ããæ±ãå Žåã¯ãã¿ã€ã ãŸãŒã³ãæ£ããåŠçããããšãéèŠã§ããããã«ã¯ã以äžãå«ãŸããŸãã
- UTCã§ã®æéã®ä¿åïŒãããŸãããé¿ããããã«ããã¹ãŠã®ã¿ã€ã ã¹ã¿ã³ããåå®äžçæïŒUTCïŒã§ä¿åããŸãã
- çŸå°æéãžã®å€æïŒè¡šç€ºç®çã§ãUTCã¿ã€ã ã¹ã¿ã³ãããŠãŒã¶ãŒã®çŸå°ã¿ã€ã ãŸãŒã³ã«å€æããŸãã
- 倿éã®åŠçïŒå€æéïŒDSTïŒã«æ³šæããããã«å¿ããŠã¿ã€ã ã¹ã¿ã³ãã調æŽããŸãã
ããšãã°ãã¿ã¹ã¯ãã¹ã±ãžã¥ãŒã«ããã³ãã³ãã¯ãã¹ã±ãžã¥ãŒã«ãããæéãUTCã§ä¿åããã¹ã±ãžã¥ãŒã«ã衚瀺ãããšãã«ãŠãŒã¶ãŒã®çŸå°ã¿ã€ã ãŸãŒã³ã«å€æããå¿ èŠããããŸãã
3. æåçãªéã
ãŠãŒã¶ãŒãšå¯Ÿè©±ããã³ãã³ããèšèšããéã¯ãæåçãªéãã«æ³šæããŠãã ãããããã«ã¯ã以äžãå«ãŸããŸãã
- æ¥ä»ãšæ°å€ã®ãã©ãŒãããïŒäžèšã®ããã«ãæåãç°ãªããšãæ¥ä»ãšæ°å€ã®ãã©ãŒããããç°ãªããŸãã
- äœæã®ãã©ãŒãããïŒäœæã®ãã©ãŒãããã¯ãåœã«ãã£ãŠå€§ããç°ãªããŸãã
- ã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ïŒã³ãã¥ãã±ãŒã·ã§ã³ã¹ã¿ã€ã«ã¯ãæåã«ãã£ãŠç°ãªããŸããçŽæ¥çãªã³ãã¥ãã±ãŒã·ã§ã³ã奜ãæåãããã°ã鿥çãªã³ãã¥ãã±ãŒã·ã§ã³ã奜ãæåããããŸãã
äœææ å ±ãåéããã³ãã³ãã¯ãç°ãªãäœæã®ãã©ãŒãããã«å¯Ÿå¿ããããã«èšèšããå¿ èŠããããŸããåæ§ã«ããšã©ãŒã¡ãã»ãŒãžã¯ãæåçã«é æ ®ããæ¹æ³ã§èšè¿°ããå¿ èŠããããŸãã
4. æ³ä»€éµå®
ã³ãã³ããã察象åœã®é¢é£ãããã¹ãŠã®æ³ä»€éµå®èŠä»¶ã«æºæ ããŠããããšã確èªããŸããããã«ã¯ã以äžãå«ãŸããŸãã
- ããŒã¿ãã©ã€ãã·ãŒæ³ïŒæ¬§å·é£åã®äžè¬ããŒã¿ä¿è·èŠåïŒGDPRïŒãç±³åœã®ã«ãªãã©ã«ãã¢å·æ¶è²»è ãã©ã€ãã·ãŒæ³ïŒCCPAïŒãªã©ã®ããŒã¿ãã©ã€ãã·ãŒæ³ãéµå®ããŸãã
- ã¢ã¯ã»ã·ããªãã£åºæºïŒWebã³ã³ãã³ãã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ïŒWCAGïŒãªã©ã®ã¢ã¯ã»ã·ããªãã£åºæºãéµå®ããŠãã³ãã³ããé害ã®ãããŠãŒã¶ãŒã§ãã¢ã¯ã»ã¹ã§ããããã«ããŸãã
- éèèŠå¶ïŒã³ãã³ãã«éèååŒãå«ãŸããå Žåã¯ããããŒãã³ããªã³ã°å¯ŸçïŒAMLïŒæ³ãªã©ã®éèèŠå¶ãéµå®ããŸãã
ããšãã°ãå人ããŒã¿ãåŠçããã³ãã³ãã¯ãGDPRãŸãã¯CCPAèŠä»¶ã«åŸã£ãŠããŒã¿ãåéããã³åŠçãããããã«ããå¿ èŠããããŸãã
5. ããŒã¿æ€èšŒ
ã³ãã³ãã«æž¡ãããããŒã¿ãæå¹ã§ããããšãä¿èšŒããããã«ãå ç¢ãªããŒã¿æ€èšŒãå®è£ ããŸããããã«ã¯ã以äžãå«ãŸããŸãã
- å ¥åæ€èšŒïŒæªæã®ããæ»æãããŒã¿ã®ç Žæãé²ãããã«ããã¹ãŠã®ãŠãŒã¶ãŒå ¥åãæ€èšŒããŸãã
- ããŒã¿åæ€èšŒïŒããŒã¿ãæ£ããåã§ããããšã確èªããŸãã
- ç¯å²æ€èšŒïŒããŒã¿ã蚱容ç¯å²å ã«ããããšã確èªããŸãã
ãŠãŒã¶ãŒã®ãããã¡ã€ã«ãæŽæ°ããã³ãã³ãã¯ãããŒã¿ããŒã¹ãæŽæ°ããåã«ãæ°ãããããã¡ã€ã«æ å ±ãæå¹ã§ããããšã確èªããããã«æ€èšŒããå¿ èŠããããŸããããã¯ãããŒã¿åœ¢åŒãšæ€èšŒã«ãŒã«ãåœã«ãã£ãŠç°ãªãå¯èœæ§ãããåœéã¢ããªã±ãŒã·ã§ã³ã§ã¯ç¹ã«éèŠã§ãã
å®éã®ã¢ããªã±ãŒã·ã§ã³ãšäŸ
ã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒããåããæ±çšã³ãã³ããã¿ãŒã³ã¯ã以äžãå«ãå¹ åºãã¢ããªã±ãŒã·ã§ã³ã«é©çšã§ããŸãã
- Eã³ããŒã¹ãã©ãããã©ãŒã ïŒããŸããŸãªæ³šææäœïŒäœæãæŽæ°ããã£ã³ã»ã«ïŒãåšåº«ç®¡çïŒè¿œå ãåé€ã調æŽïŒãããã³é¡§å®¢ç®¡çïŒè¿œå ãæŽæ°ãåé€ïŒã®åŠçã
- ã³ã³ãã³ã管çã·ã¹ãã ïŒCMSïŒïŒããŸããŸãªã³ã³ãã³ãã¿ã€ãïŒèšäºãç»åããããªïŒããŠãŒã¶ãŒããŒã«ãšæš©éãããã³ã¯ãŒã¯ãããŒããã»ã¹ã®ç®¡çã
- éèã·ã¹ãã ïŒãã©ã³ã¶ã¯ã·ã§ã³ã®åŠçãã¢ã«ãŠã³ãã®ç®¡çãããã³ã¬ããŒãã®åŠçã
- ã¯ãŒã¯ãããŒãšã³ãžã³ïŒæ³šæåŠçãèè³æ¿èªãä¿éºéè«æ±åŠçãªã©ãè€éãªããžãã¹ããã»ã¹ã®èª¿æŽã
- ã²ãŒã ã¢ããªã±ãŒã·ã§ã³ïŒãã¬ã€ã€ãŒã¢ã¯ã·ã§ã³ãã²ãŒã ç¶æ ã®æŽæ°ãããã³ãããã¯ãŒã¯åæã®ç®¡çã
äŸïŒEã³ããŒã¹æ³šæåŠç
Eã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ãæ±çšã³ãã³ããã¿ãŒã³ã䜿çšããŠãããŸããŸãªæ³šæé¢é£ã®ã¢ã¯ã·ã§ã³ãåŠçã§ããŸãã
public enum OrderActionType
{
Create,
Update,
Cancel,
Ship
}
public class OrderAction
{
public OrderActionType ActionType { get; set; }
public string OrderId { get; set; }
public string CustomerId { get; set; }
public List<OrderItem> OrderItems { get; set; }
// Other order-related data
}
public class CreateOrderCommand : ICommand<OrderAction>
{
private readonly IOrderService _orderService;
public CreateOrderCommand(IOrderService orderService)
{
_orderService = orderService ?? throw new ArgumentNullException(nameof(orderService));
}
public void Execute(OrderAction action)
{
if (action.ActionType != OrderActionType.Create) throw new ArgumentException("Invalid action type for this command.");
_orderService.CreateOrder(action.CustomerId, action.OrderItems);
}
}
// Other command implementations (UpdateOrderCommand, CancelOrderCommand, ShipOrderCommand)
ããã«ãããã³ã¢ã³ãã³ãåŠçããžãã¯ã倿Žããã«ãæ°ããæ³šæã¢ã¯ã·ã§ã³ãç°¡åã«è¿œå ã§ããŸãã
é«åºŠãªãã¯ããã¯ãšæé©å
1. ã³ãã³ããã¥ãŒãšéåæåŠç
é·æéå®è¡ãããã³ãã³ããŸãã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããã³ãã³ãã®å Žåã¯ãããã©ãŒãã³ã¹ãšå¿çæ§ãåäžãããããã«ãã³ãã³ããã¥ãŒãšéåæåŠçã®äœ¿çšãæ€èšããŠãã ãããããã«ã¯ã以äžãå«ãŸããŸãã
- ã³ãã³ãããã¥ãŒã«è¿œå ããïŒã€ã³ããŒã«ãŒã¯ãã³ãã³ããçŽæ¥å®è¡ãã代ããã«ããã¥ãŒã«è¿œå ããŸãã
- ããã¯ã°ã©ãŠã³ãã¯ãŒã«ãŒïŒããã¯ã°ã©ãŠã³ãã¯ãŒã«ãŒã¯ããã¥ãŒããã³ãã³ããéåæçã«åŠçããŸãã
- ã¡ãã»ãŒãžãã¥ãŒïŒRabbitMQãApache Kafkaãªã©ã®ã¡ãã»ãŒãžãã¥ãŒã䜿çšããŠãè€æ°ã®ãµãŒããŒã«ã³ãã³ãã忣ããŸãã
ãã®ã¢ãããŒãã¯ã倿°ã®ã³ãã³ããåæã«åŠçããå¿ èŠãããã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã
2. ã³ãã³ãã®éçŽãšãããåŠç
è€æ°ã®ãªããžã§ã¯ãã«å¯ŸããŠåæ§ã®æäœãå®è¡ããã³ãã³ãã®å Žåã¯ããªãŒããŒããããåæžããããã«ãåäžã®ãããã³ãã³ãã«éçŽããããšãæ€èšããŠãã ãããããã«ã¯ã以äžãå«ãŸããŸãã
- ã³ãã³ãã®ã°ã«ãŒãåïŒåæ§ã®ã³ãã³ããåäžã®ã³ãã³ããªããžã§ã¯ãã«ã°ã«ãŒãåããŸãã
- ãããåŠçïŒããŒã¿ããŒã¹åŒã³åºããŸãã¯ãããã¯ãŒã¯ãªã¯ãšã¹ãã®æ°ãæžããããã«ãã³ãã³ãããããã§å®è¡ããŸãã
ããšãã°ãè€æ°ã®ãŠãŒã¶ãŒãããã¡ã€ã«ãæŽæ°ããã³ãã³ãã¯ãããã©ãŒãã³ã¹ãåäžãããããã«åäžã®ãããã³ãã³ãã«éçŽã§ããŸãã
3. ã³ãã³ãã®åªå é äœä»ã
äžéšã®ã·ããªãªã§ã¯ãç¹å®ã®ã³ãã³ããä»ã®ã³ãã³ããããåªå ããå¿ èŠãããå ŽåããããŸããããã¯ã以äžã«ãã£ãŠå®çŸã§ããŸãã
- åªå é äœããããã£ã®è¿œå ïŒã³ãã³ãã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯åºæ¬ã¯ã©ã¹ã«åªå é äœããããã£ã远å ããŸãã
- åªå é äœãã¥ãŒã®äœ¿çšïŒåªå é äœãã¥ãŒã䜿çšããŠã³ãã³ããä¿åããåªå é äœé ã«åŠçããŸãã
ããšãã°ãã»ãã¥ãªãã£ã¢ããããŒããç·æ¥ã¢ã©ãŒããªã©ã®éèŠãªã³ãã³ãã«ã¯ãã«ãŒãã³ã¿ã¹ã¯ãããé«ãåªå é äœãäžããããšãã§ããŸãã
çµè«
æ±çšã³ãã³ããã¿ãŒã³ã¯ãã¢ã¯ã·ã§ã³ã®ã¿ã€ãã»ãŒãã§å®è£ ãããŠããå Žåã倿§ãªã¢ããªã±ãŒã·ã§ã³ã§è€éãªã¢ã¯ã·ã§ã³ã管çããããã®åŒ·åã§æè»ãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããžã§ããªãã¯ã掻çšããããšã§ãã¿ã€ãã»ãŒããåäžããããã€ã©ãŒãã¬ãŒãã³ãŒããåæžããä¿å®æ§ãé«ããããšãã§ããŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ãåœéåãã¿ã€ã ãŸãŒã³ãæåçãªéããããã³æ³ä»€éµå®ãªã©ã®èŠçŽ ãèæ ®ããŠãããŸããŸãªå°åã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããããšãéèŠã§ãããã®ããã°æçš¿ã§èª¬æãããã¯ããã¯ãšæé©åãé©çšããããšã§ãã°ããŒãã«ãªãŒãã£ãšã³ã¹ã®ããŒãºãæºããå ç¢ã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããã¿ã€ãã»ãŒãã§åŒ·åãããã³ãã³ããã¿ãŒã³ã®æ éãªé©çšã¯ã仿¥ã®çµ¶ãéãªãå€åããã°ããŒãã«ãªç¶æ³ã«ãããŠãé©å¿å¯èœã§ä¿å®å¯èœãªãœãããŠã§ã¢ã¢ãŒããã¯ãã£ãæ§ç¯ããããã®åŒ·åºãªåºç€ãæäŸããŸãã