S>Т.е. нужен к примеру метод FindCustomers(). Этот метод находится в фасаде
В фасаде не должно быть такого метода, иначе получается что бизнес логика пролазит в абстракции.
Хорошим методом для фасада может быть что-то типа:
facade.setect(table, condition, fields);
Так же необходимы промежуточные кастомные классы, которые результат запросов к фасаду заворачивают в объекты нужных клиенту классов.
// core
interface ICustomer;
class CustomerServiceBase
{
Facade facade;
List<ICustomer> selectCustomers(Condition cond);
}
// client
class ClientACustomer : ICustomer;
class ClientACustomerService : CustomerServiceBase
{
List<ICustomer> selectCustomers(Condition cond)
{
// транслировать запрос фасаду и вернуть список объектов класса ClientACustomer
}
}