Чтение онлайн

на главную - закладки

Жанры

Шрифт:

get { return address; }

set { address = value; }

}

}

public partial class Order : IOrder {

public Guid OrderId {

get { return orderId; }

set { orderld = value; }

}

public Guid Customerld {

get { return customerId; }

set { customerId = value; }

}

public Guid ProductId {

get { return productId; }

set { productId = value; }

}

public int Count {

get { return count; }

set { count = value; }

}

public DateTime OrderDateTime {

get { return orderDateTime; }

set { orderDateTime = value; }

}

}

public partial class Product : IProduct {

public Guid ProductId {

get { return productId; }

set { productId = value; }

}

public string Name {

get { return name; }

set { name = value; }

}

public bool IsAvailable {

get { return isAvailable; }

set { isAvailable = value; }

}

public decimal Cost {

get { return cost; }

set { cost = value; }

}

}

На этом этапе существует еще одна полезная возможность, которую предлагает инъекция дополнительного кода: вы можете назначать имена для свойств интерфейса, не привязываясь к именам, которые определены в базе данных. Скажем, для поля cost таблицы Products мы могли бы задать другое название, например, ProductCost.

После реализации интерфейсов создадим простейшие хранилища и сервисы, для этого сначала объявим их интерфейсы:

public interface ICustomerRepository {

ICustomer GetCustomerById(Guid customerId);

IEnumerable<ICustomer> GetCustomersByProduct(Guid productId);

}

Хранилище для заказчиков позволит выбирать заказчика по идентификатору и выбирать всех заказчиков, связанных с определенным товаром.

public interface IOrderRepository {

IOrder GetOrderById(Guid orderId);

IEnumerable<IOrder> GetCustomerOrders(Guid customerId);

}

Хранилище для заказов позволит выбирать заказ по идентификатору и список заказов определенного заказчика.

public interface IProductRepository {

IProduct GetProductById(Guid productId);

IEnumerable<IProduct> GetAvailableProducts;

IEnumerable<IProduct> GetProductListByName(string name);

}

Хранилище для товаров позволит найти товар по идентификатору, список товаров по наименованию и список товаров, которые доступны в данный момент.

Реализация данных хранилищ не составляет труда (листинг 3.3).

Листинг 3.3. Реализация хранилищ

public class CustomerRepository : ICustomerRepository {

private readonly MyDatabaseDataContext _dataBase;

public CustomerRepository(MyDatabaseDataContext db)

{

if (db == null)

throw new ArgumentNullException("db");

_dataBase = db;

}

public ICustomer GetCustomerById(Guid customerId)

{

if (customerId == Guid.Empty)

throw new ArgumentException("customerId");

return _dataBase.Customers

.SingleOrDefault(x => x.customerId == customerId);

}

public IEnumerable<ICustomer> GetCustomersByProduct(Guid productId) {

if (productId == Guid.Empty)

throw new ArgumentException("customerId");

return _dataBase.Orders

.Where(x => x.productId == productId)

.Select<Order, ICustomer>(x => x.Customer).Distinct;

}

}

public class OrderRepository : IOrderRepository {

private readonly MyDatabaseDataContext _dataBase;

public OrderRepository(MyDatabaseDataContext db)

{

if (db == null)

throw new ArgumentNullException("db");

_dataBase = db;

}

public IOrder GetOrderByld(Guid orderld)

{

if (orderId == Guid.Empty)

throw new ArgumentException("orderId");

return _dataBase.Orders

.SingleOrDefault(x => x.orderId == orderId);

}

public IEnumerable<IOrder> GetCustomerOrders(Guid customerId)

{

if (customerId == Guid.Empty)

throw new ArgumentException("customerId");

return _dataBase.Orders

.Where(x => x.customerId == customerId)

.Select<Order, IOrder>(x => x);

}

}

public class ProductRepository : IProductRepository {

private readonly MyDatabaseDataContext _dataBase;

public ProductRepository(MyDatabaseDataContext db)

{

if (db == null)

throw new ArgumentNullException("db");

_dataBase = db;

}

public IProduct GetProductById(Guid productId)

{

if (productId == Guid.Empty)

throw new ArgumentException("productId");

return _dataBase.Products

Поделиться:
Популярные книги

Крылатый воин

Чернобровкин Александр Васильевич
30. Вечный капитан
Фантастика:
попаданцы
5.00
рейтинг книги
Крылатый воин

Эпоха Опустошителя. Том VII

Павлов Вел
7. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VII

Схрон

Головачев Василий Васильевич
2. Смутное время
Фантастика:
научная фантастика
8.08
рейтинг книги
Схрон

Воевода

Ланцов Михаил Алексеевич
5. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Воевода

Базис

Владимиров Денис
7. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Базис

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Обреченная

Макдевит Джек
2. Космоархеологи
Фантастика:
научная фантастика
7.00
рейтинг книги
Обреченная

Влечение

Усачева Елена Александровна
1. Пленники сумерек
Любовные романы:
современные любовные романы
8.02
рейтинг книги
Влечение

На границе империй. Том 10. Часть 9

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 9

Барон Бранд Берс. Том 2

Limonad
2. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 2

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Вернадский

Гумилевский Лев Иванович
325. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Вернадский

Н - 7

Ильин Владимир Алексеевич
7. Напряжение
Фантастика:
фэнтези
героическая фантастика
городское фэнтези
5.00
рейтинг книги
Н - 7