در طراحی نرم افزار یکی از اصول جالب نگاه به داده ها از منظر زمان است. به زبان ساده تمام چیزی که نرم افزار انجام می دهد این است که اطلاعات را در گذر زمان منتقل می کند، چه بین افراد و چه بین بخش های مختلف یک سیستم. با توجه به مفهوم زمان داده ها به سه بخش گذشته، حال، و آینده تقسیم می شوند. به همین شکل داده ها نیز در سه دسته Commandها، Eventها و State قرار می گیرند.
Commandها در واقع نشانه دهنده چیزی هستند که کاربران می خواهند در آینده اتفاق بیفتد. یک Command نوعی از داده است که هدفش نشان دادن "قصد" یا "خواسته" است. اما چیزی که این داده را خاص می کند ناپایداری ذاتی آن است. چرا؟ چون آینده قابل پیش بینی نیست. خواسته ممکن است تغییر کند یا شاید اصلا انجام نشود. زمان هم اینجا نقش مهمی دارد، چون وقتی سیستم تصمیمی بگیرد، ممکن است Command هم بی اعتبار شود.
در مقابل رویدادها داستان دیگری دارند. رویدادها نماینده گذشته هستند. آن ها چیزی را ثبت می کنند که قبلا اتفاق افتاده و دیگر قابل تغییر نیست. همین ویژگی باعث می شود که رویدادها ذاتا پایدار باشند. اگر قبول کنیم که "آنچه رخ داده است، رخ داده است"، می توانیم به رویدادها به عنوان یک "منبع حقیقت پایدار" در طراحی سیستم ها نگاه کنیم.
اما State، یا همان وضعیت فعلی، به حال مربوط می شود. این نوع داده نمایشی از لحظه فعلی است. یک اسنپ شات از هرچیزی که در حال حاضر وجود دارد. نکته مهم درباره State این است که با گذر زمان تغییر می کند. گاهی سریع و گاهی آرام. State چیزی است که سیستم باید آن را در لحظه نگه دارد، اما در عین حال همیشه امکان تغییر دارد.
این سه دسته از داده نه تنها بر اساس زمان، بلکه از نظر ویژگی های پایداری نیز تفاوت های مهمی دارند. Commandها ناپایدار هستند، چون آینده نامشخص است. رویدادها پایدارند، چون گذشته غیرقابل تغییر است. State جایی بین این دو قرار دارد، همواره درحال تغییر است، اما در لحظه ای که ثبت می شود ثابت و پایدار به نظر می رسد.
این سه مفهوم بیش از یک الگوی ذهنی هستند. آن ها اساس بسیاری از تکنیک های مدل سازی در طراحی نرم افزار هستند. برای مثال در نرم افزار اغلب از رنگ ها برای نمایش این دسته ها استفاده می شود: Commandها آبی، رویدادها نارنجی و State سبز. این رنگ ها به طور ناخودآگاه حس پایداری یا پویایی هر دسته را القا می کنند.
اگر کمی دقیق تر به سیستم های امروزی نگاه کنیم، می بینیم که این تقسیم بندی چقدر کاربردی و مهم است. در معماریهای Event-Driven، رویدادها مرکز اصلی توجه هستند و بهعنوان Source of Truth عمل می کنند. سیستم های مبتنی بر CQRS از این سه نوع به صورت تفکیک شده برای مدیریت عملیات و گزارش گیری استفاده می کنند. یا حتی در Temporal Databases این سه مفهوم پایه گذار نحوه ذخیره و مدیریت داده ها هستند.
در پایان، باید بدانیم که نگاه از منظز زمان به داده ها نه تنها درک ما را در طراحی نرم افزار بهبود می بخشد، بلکه باعث می شود معماری های مقیاس پذیرتر، قابل فهم تر و انعطاف پذیرتر بسازیم. می توانیم گذشته را از رویدادها داشته باشیم، آینده رو با Command ها برنامه ریزی کنیم و با State ها در لحظه کار کنیم. این سه بخش پویایی زمان را به دنیای نرم افزار می آورند و آن را زنده تر می کنند.