Шаг 191 - Включение бизнес логики

Включение бизнес логики в компоненты неотъемлемая часть реальных приложений для вэб. В ASP.NET бизнес объекты это строительные блоки для многозвенных Web приложений, такие как с уровнем доступа к данным или с правилами для приложения. При использовании Com объектов возникало много проблем во первых их нужно было зарегистрировать(используя regsvr32), но основная проблема была в том, что приложение однажды загрузившее его "лочило" компонент и чтобы его удалить или заменить нужно было останавливать целый вэб сервер.

ASP.NET предлагает следующее решение этой проблемы, размещать объекты в какой-то известной директории которые затем будут подгружаться во время выполнения. Эта дериктория всегда называется /bin, она всегда располагается в к корневом каталоге для приложения(или в корневом для виртуальной директории). Преимущество заключается в том, что не нужно регистрировать компоненты для того, чтобы они стали доступны из ASP.NET - компоненты будут установлены простым копированием в директорию.

В дополнение в вышесказанному ASP.NET не требует чтобы эти компоненты лочились на диске во время выполнения. Дело в следующем, ASP.NET дублирует сборки найденные в /bin и загружает копии вместо настоящих. Настоящие компоненты могут без проблем заменены даже когда Web server работает, изменения в /bin автоматически будут замечены во время выполнения после чего ASP.NET позволяет текущим работающим запросам закончиться и сразу же все новые входящие запросы к приложению будут использовать новый или новые компоненты.

Бизнес компоненты это только класс экземпляр которого вы можете создавать на странице, которая импортирует его. Пример

using System;
using System.Text;

namespace HelloWorld {
public class HelloObj {
	private String _name;

	public HelloObj() {
		_name = null;
	}

	public String FirstName {
		get {
			return _name;
		}
		set {
			_name = value;
		}
	}

	public String SayHello() {
		StringBuilder sb = new StringBuilder("Hello ");
		if (_name != null)
			sb.Append(_name);
		else
			sb.Append("World");

		sb.Append("!");
		return sb.ToString();
	}
}
}

Откомпилируйте файл с этим классом используя csc.exe из командной строки. Используйте /t опцию для того чтобы получить библиотеку.

csc /t:library HelloObj.cs

И скопируйте библиотеку потом в /bin. Теперь этот компонент доступен из любой страницы, где нужно использовать его.

<%@ Import Namespace="HelloWorld" %>

<html>

<style%>
div 
{ 
	font: 8pt verdana;
	background-color:cccccc;
	border-color:black;
	border-width:1;
	border-style:solid;
	padding:10,10,10,10; 
}
</style>

<script language="C#" runat="server">

public void Page_Load(Object sender, EventArgs E)
{
	HelloObj comp = new HelloObj();

	Message.InnerHtml += comp.SayHello() + "<p>";

	comp.FirstName = "Microsoft .NET Framework";
	Message.InnerHtml += comp.SayHello() + "<p>";

	comp.FirstName = "ASP.NET";
	Message.InnerHtml += comp.SayHello() + "<p>";

	comp.FirstName = "World!!!";
	Message.InnerHtml += comp.SayHello();
}

</script>

<body style="font: 10pt verdana">
	<h3>A Simple Managed Component</h3>
	<h5>Object Output: </h5>
	<div id="Message" runat="server"/>
</body>
</html>

Заметьте Import директива указывает какой namespace нужно подключить. Как только namespace включён, класс может быть использован на странице. Поскольку сборка подгружается ASP.NET во время выполнения, то нам нужен только импорт namespace, чтобы компонент был доступен.

<%@ Import Namespace="HelloWorld" %>

По умолчанию ASP.NET загружает сборки из /bin каталога когда приложение стартует. Сборки могут также подгружаться через файл конфигурации.

 
<configuration>
	<compilation>
		<assemblies>
			<!--The following assemblies are loaded explicitly from the global cache-->
			<add assembly="System.Data"/>
			<add assembly="System.Web.Services"/>
			<add assembly="System.Drawing"/>
			<!--This tells ASP.NET to load all assemblies from /bin-->
			<add assembly="*"/>
		</assemblies>
	</compilation>
</configuration>

Примечание: сборка загруженная из /bin каталога доступна только для того приложения где она была запущена. Это подразумевает, что приложения могут использовать разные сборки с одинаковыми именами классов и namespace без конфликтов. По сути бизнес объекты это локальные сборки.

Удачи. Леонид Молочный.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Leonid Molochniy - 01.04.2002