Тип БД (SQL, No-SQL, Graph и т. Д.) Должен в первую очередь зависеть от вашей рабочей нагрузки и варианта использования. Как только вы решите, вы можете оценить продукты в этой категории. Если вы привязаны к AWS и вам нужно выбирать между предложениями по базам данных AWS, я все равно рекомендовал бы тот же подход, а затем работал в обратном направлении для оптимизации затрат. Почти все дБ-предложения в AWS имеют несколько конфигураций с ценовыми диапазонами от бесплатных до действительно дорогих.
Дайте мне знать, если вам нужна дополнительная помощь!
Имеется CuttingEdge.Conditions . Пример использования со страницы:
public ICollection GetData(Nullable<int> id, string xml, ICollection col)
{
// Check all preconditions:
id.Requires("id")
.IsNotNull() // throws ArgumentNullException on failure
.IsInRange(1, 999) // ArgumentOutOfRangeException on failure
.IsNotEqualTo(128); // throws ArgumentException on failure
xml.Requires("xml")
.StartsWith("<data>") // throws ArgumentException on failure
.EndsWith("</data>"); // throws ArgumentException on failure
col.Requires("col")
.IsNotNull() // throws ArgumentNullException on failure
.IsEmpty(); // throws ArgumentException on failure
// Do some work
// Example: Call a method that should not return null
object result = BuildResults(xml, col);
// Check all postconditions:
result.Ensures("result")
.IsOfType(typeof(ICollection)); // throws PostconditionException on failure
return (ICollection)result;
}
Еще один хороший подход, который не упакован в библиотеку, но легко может быть, в блоге Paint.Net :
public static void Copy<T>(T[] dst, long dstOffset, T[] src, long srcOffset, long length)
{
Validate.Begin()
.IsNotNull(dst, "dst")
.IsNotNull(src, "src")
.Check()
.IsPositive(length)
.IsIndexInRange(dst, dstOffset, "dstOffset")
.IsIndexInRange(dst, dstOffset + length, "dstOffset + length")
.IsIndexInRange(src, srcOffset, "srcOffset")
.IsIndexInRange(src, srcOffset + length, "srcOffset + length")
.Check();
for (int di = dstOffset; di < dstOffset + length; ++di)
dst[di] = src[di - dstOffset + srcOffset];
}
Я использую его в моем проект , и вы можете позаимствовать код оттуда.
Учитывая Контракты Кода Microsoft, выпускающие.NET 4.0, я попытался бы найти ту, которая главным образом совместима, если возможный - и в противном случае пишут это самостоятельно. Тот путь, когда Вы обновите до.NET 4.0 (в конечном счете) миграция, будет легче.
Существует несколько методов, которые можно использовать.
Мой фаворит использует Аспектно-ориентированное программирование. Выезд PostSharp.
Можно также смотреть на Spec#, расширение C#
В 4,0, у Вас будет полнофункциональная библиотека контракта.
Наконец, мой коллега придумал довольно полезную защитную библиотеку: http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48
Я не знаю ни о ком, которые коммерчески доступны. Существует некоторая поддержка этого типа кода в Библиотеке Предприятия шаблонов и методов. Существует также много проектов с открытым исходным кодом, которые, кажется, делают это также (в различных степенях) на CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation.
Большую часть времени эти типы библиотек заканчивают тем, что были пользовательские записанный и остаются внутренними к компании, которая использует их.
Существует поддержка, прибывающая в.NET 4.0 для обеспечения механизмов, чтобы сделать этот Код использования Контракты, которые основаны на Spec#.
Недавно я написал сообщение о классах охранников (тоже не нашел никакой информации): http://ajdotnet.wordpress.com/2009/08/01/posting-guards- guard-classes-объяснено /
Я также опубликовал соответствующую реализацию класса Guard (не стесняйтесь использовать этот код как есть или настроить его под свои нужды): ajdotnet.wordpress.com/guard-class/
Что касается взаимосвязи между классами Guard и Контрактом кода в .NET 4.0 (преемник Spec #), прочтите следующий пост: www.leading-edge-dev.de/?p=438
( извините за фрагментированные ссылки, на сайте разрешена только одна ссылка ...)
HIH, AJ.NET