5

我见过几个在业务逻辑中使用以下代码的示例站点核心应用程序:

 Database database = Factory.GetDatabase(itemUri.DatabaseName);
 Assert.IsNotNull(database, itemUri.DatabaseName);
 return database.GetItem(attribute);

有人可以澄清这是否是一个站点核心约定。我只将 Assert 用于单元测试场景,但不在逻辑范围内。

谢谢。

4

2 回答 2

8

我发现这篇文章解决了你的大部分问题。有几点很重要:

  • .NET 断言与 Sitecore 断言不同。至少,Sitecore Assert 更加冗长。
  • 在 Sitecore 中,使用断言检查方法输入被认为是最佳实践。(您会在 Sitecore 的代码和Sitecore 社区的代码中发现这些断言始终如一(我无法告诉您 Field is null 有多烦人。))

我认为同样重要的是要注意,我似乎在 Sitecore 博客中找到的许多示例都是无论如何都会发生异常的情况。因此,ArgumentIsNotNull例如,如果要省略,那将导致 a NullObjectException,因此 Assert 实际上会稍微清理一下。在您的情况下,如果数据库不可用,那也会导致问题。Assert 使得错误的原因很清楚。

于 2013-03-09T05:30:55.280 回答
5

这是一个可以在 sitecore.dll 中大量使用的约定。如果不满足该条件,它用于引发异常。

例如,如果您查看 Assert.IsTrue,如果不满足条件,系统将抛出“InvalidOperationException”

从 Search API 中反编译 a 方法我发现了这个。

  Assert.IsTrue(local_0 != null, "SearchConfiguration is missing");

然后如果我们反编译 IsTrue,它会给我们

   [AssertionMethod]
public static void IsTrue([AssertionCondition(AssertionConditionType.IS_TRUE)] bool condition, string message)
{
  if (!condition)
    throw new InvalidOperationException(message);
}

要回答您的其他问题,您可以在应用程序代码中使用它,因为您可以看到它只是在不满足条件时引发异常的另一种方式。

混淆与断言一词的使用有关,正如您所说,这通常出现在传统 c# .NET 解决方案中的单元测试上下文中。只要您知道 Sitecore 断言在幕后所做的事情,是否使用它取决于您。

于 2015-05-19T00:36:33.137 回答