Для входа на форум нажмите здесь
Computer programming
Автор темы: Aft3rmath_renamed_580476_10042022
Дата создания:
Old 28.04.2011, 14:52
Re: ADO.Net + C#
Originally Posted by Leledinn:
Вопрос: где бы время найти чтобы все это прочитать?...
угу, мне в голову пришли ещё наполеоновские планы наконец осилить Таненбаума.

http://www.ozon.ru/context/detail/id/3092042/
http://www.ozon.ru/context/detail/id/2967330/
http://www.ozon.ru/context/detail/id/1504328/

целый список себе составил ещё, большинство ты уже озвучил тут, кстати :) вообще, с некоторого времени предпочитаю покупать бумажные книги - пусть и обойдётся в копеечку, зато гораздо удобнее изучать.

Добавлено через 1 минуту
Originally Posted by Leledinn:
нет, это плохое название
Coding: Recommendations and References.

хотя, тоже нет - это слишком пафосно.
Last edited by Anquiatus_renamed_642274_29082021; 28.04.2011 at 14:53. Reason: Добавлено сообщение
Old 28.04.2011, 15:29
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
У меня по операционным системам дома лежит книга одна... она 197бородатого года издания. Тогда еще ОС как явление были весьма новы.

Там предельно кратко и ясно описаны все принципы построения ОС. Даже какие-то примеры алгоритмов есть. Книга, естественно, переведена в советское время. Таких книг больше не делают. :(

Есть еще книга по принципам разработки ПО, тех же лет примерно.

Поразительные книги.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Old 28.04.2011, 16:46
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
я последнее время книжки, как я вление, не ценю. Они тратят мое время. а это плохо.

Есть совершенно другой вид книги - хорошая и простая в понимании. Вот эти стоит читать.

Из таких встречал только... 4:

патерны ооп
чистый код
жаба скрипт Джона Рейсинга
и сети Таненбаума.

У Троелсена книга безусловно не плохая, однако до такой концентрации мысли как в этих 4 ей далеко.

Кстати у Таненбаума есть книга про ОС. Там рассказывается о том, как создать свою ОС. Причем все этапы и части, начиная от файловой системы, заканчивая чем угодно. :)
Old 28.04.2011, 17:17
Re: ADO.Net + C#
Вот еще курс лекций по алгоритмам неплохой
http://www.intuit.ru/department/algorithms/staldata/0/

Кстати про ооп и паттерны писали уже, а про рефакторинг? не помню уже, слишком много ссылок было
http://www.ozon.ru/context/detail/id/1308678/
Old 28.04.2011, 17:41
Re: ADO.Net + C#
Originally Posted by Adelor:
Кстати про ооп и паттерны писали уже, а про рефакторинг? не помню уже, слишком много ссылок было
http://www.ozon.ru/context/detail/id/1308678/
А следом Refactoring to Patterns by Joshua Kerievsky
Old 28.04.2011, 20:58
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Originally Posted by Adelor:
а про рефакторинг?
"Рефакторинг" Мартина Фаулера - это мастхев книга для программиста, претендующего на высокую культуру кода.. И, да, я его упоминал. Более того, я владею именно этой редакцией, что на Озоне.

Добавлено через 2 минуты
Originally Posted by Adelor:
Вот еще курс лекций по алгоритмам неплохой
Ну я про ИНТУИТ упоминал, вроде вразумительно пишут. На той же инфанате.ком можно найти полный курс лечек от ИНТУИТа.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Last edited by Leledinn; 28.04.2011 at 20:58. Reason: Добавлено сообщение
Old 29.04.2011, 13:45
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Короче, меня такая фигня интересует:

Мне нужно чтобы при создании массива числовых примитивов C# (базовые числовые типы short, int, byte, и т.д.) элементы инициализировались не по-умолчанию значением 0, а некоторым другим значением. Например, вот такой код:

Code:
short [] short_vector = new short[100500];
По умолчанию, там будет массив из 100500 нулевых числа типа Int16. А мне надо чтобы там были не нули, а значения 0xFF00, например. Без топорных циклов заполнения массива поэлементно. Они засоряют код ужасно. У меня больше 40 массивов разной длины в качестве полей класса, содержащих разную информацию, поэтому мне надо инициализировать все их особенным образом в конструкторе класса.

Наследовать от примитива и переопределить ему конструктор по-умолчанию ? Это, мне кажется, или жесть... или вообще невозможно. нельзя, у примитивов не конструкторов

Еще вариант: класс System.Array наследовать и переопределить ему метод Clear(). По-моему, это тоже ерунда. нельзя

Есть идеи получше?

****блять! Придется циклы писать... Даже Array.ForEach() принимает на вход делегат, который с элементами массива по значению работает ,а не по ссылке, т. е. присваивать внутри кода делегата переменной новое значение бессмысленно, это копия ...
Array.Initialize() работает только с массивами ссылочных типов.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Old 29.04.2011, 14:09
Re: ADO.Net + C#
может вместо массива использовать класс-наследник типизированной коллекции, и задать нужный конструктор?
Code:
class myInt16 : List<short>
{
    public myInt16(int quantity, short defaultValue)    
    {
        for (int i=0;i<quantity;i++) Add(defaultValue);
    }
}
инициализация и доступ будут выглядеть как раз примерно как тебе нужно:
Code:
myInt16 array = new myInt16(10, 13);
foreach (short value in array)
    Console.Write(value + " ");
Console.WriteLine();
Console.WriteLine(array[8]);
Console.ReadKey();
Old 29.04.2011, 14:21
DistortNeo_renamed_46025_26042024's Avatar
Заклинатель электронов в кремниевых кристаллах
Join Date:
12.05.2006
Знаток
Issue reason: За помощь форуму и посетителям. Зомби мутанта Признанный автор
Issue reason: Статьи по Lineage2. Обзоры и руководства.
Re: ADO.Net + C#
а что мешает так сделать? :
Code:
static class Util
{
  public static T[] InitializedArray<T>(int count, T defvalue)
  {
    T[] res = new T[count];
    for (int i = 0; i < count; i++)
      res[i] = defvalue;
    return res;
  }
}

short[] my_vector = Util.InitializedArray<short>(100500, 0xFF00);

У меня все равно больше :)
Old 29.04.2011, 14:43
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
Originally Posted by DistortNeo:
а что мешает так сделать? :
да - это пойдет.

эх, люблю дженерики. :)
Old 29.04.2011, 15:20
Re: ADO.Net + C#
Originally Posted by DistortNeo:
а что мешает так сделать?
да, так получается почти в 2.5 раза быстрее, чем мой вариант :)
хотя, эта разница появляется только на количестве элементов > 1-2кк
Old 29.04.2011, 15:24
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
Народ, подскажите плз шо делать... есть такое:

PHP Code:
public T GetById<TK>(K id)
{
    return 
_dataContext.Entities.SingleOrDefault(=> MySingleOrDefault);

где _dataContext.Entities - это грубо говоря таблица типа T, а К - это тип ключа (примари кей)

так вот я хотел бы сделать лейзи лоад функцию выбора по id для этой таблички, что-то типа:

PHP Code:
protected bool MySingleOrDefault<TK>(T elementK id)
{
    
PropertyInfo[] props element.GetType().GetProperties();
    
K elId GetId<TK>(propselement);
    if (
elId.Equals(id))
        return 
true;
    return 
false;

ощем ругается оно на то, что мол там передается System.Func<T,bool> - а я хз... такие делегаты не писал. Шо это за чушь, и как оно работать то должно?
Old 29.04.2011, 15:46
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Originally Posted by DistortNeo:
а что мешает так сделать? :
Во, то что нужно.

Просто я к шаблонам STL привык, а есть ли аналог в шарпе, как-то не подумал...

Добавлено через 5 минут
Originally Posted by Anquiatus:
может вместо массива использовать класс-наследник типизированной коллекции, и задать нужный конструктор?
Вариант не пойдет, потому что у меня есть данные типа int, short, byte, sbyte, char, под каждый свой класс делать - ну его на хрен. У Нео изящнее получается.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Last edited by Leledinn; 29.04.2011 at 15:46. Reason: Добавлено сообщение
Old 29.04.2011, 18:53
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Я тут вот что подумал.... Дженерики были бы оптимальнее. Т.е. вместо массива [] я бы использовал какую-нибудь подходящую обобщенную коллекцию из Generic. Они заявлены в .NET 4 как thread-safe и оптимизированы для работы с памятью и GC.. Для меня это важно, ибо у меня программа обрабатывает список файлов в многопоточном контексте.

Добавлено через 6 минут
Originally Posted by ВедхийТип:
Народ, подскажите плз шо делать... есть такое:
Ооо... я тут не помощник точно. Не добрался еще до таких конструкций. Хотя...

Originally Posted by ВедхийТип:
System.Func
Это делегат, возвращающий некоторое значение. В отличие от Action<T>, который получает на вход, а на выходе void. Я как раз это копал, когда пытался инициализацию через Array.ForEach() сделать.

Вызов Array.ForEach( T [], Action<T>) имеет такой вид. Где Action<T> - это void delegate(T t), или что-то типа

Func <T1, T2> похоже это T1 delegate(T2 t) или что-то наподобие, если я правильно понял.

Добавлено через 10 минут
Ага, вот:

http://msdn.microsoft.com/en-us/library/bb549151.aspx

Code:
public delegate TResult Func<in T, out TResult>(     T arg )
Т и К местами поменяй.

Code:
public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
}
вот так:

Code:
public T GetById<K, T>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
}
и должно соответствовать делегату типа TResult delegate Func<T, TResult>(T t)

Может я что-то не то пишу, но смсл в том, чтоб вид функции GetById привести к виду делегата, который она "использует". Я просто по аналогии с шаблонами и указателями на функции в С++ предположил.

Добавлено через 2 минуты
Блин... мне C# с каждым днем все больше и больше нравится.

Добавлено через 3 минуты
Ах, да. Func работает только .NET 3.5 +, судя по ремарке в МСДНе.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Last edited by Leledinn; 29.04.2011 at 18:53. Reason: Добавлено сообщение
Old 29.04.2011, 18:56
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
Вот в том-то и прикол, что на вход у тебя одна переменная и я что-то не могу понять, откуда взять этот мать его параметр поиска, ведь этот единственный параметр - это Т!

не, я конечно могу через проперть класса задать этот параметр... ака глобальную переменную - но это изврат какой-то.

Все дело в том, что я не понимаю, как работает эта ерунда в принципе.

(e => e.id == id) работает, причем и е и id передается в тело делегата.

или быть может я что-то путаю?

Добавлено через 1 минуту
иногда я чувствую себя идиотом. :(
Last edited by ВедхийТип; 29.04.2011 at 18:56. Reason: Добавлено сообщение
Old 29.04.2011, 19:17
Re: ADO.Net + C#
Originally Posted by Leledinn:
она 197бородатого года издания. Тогда еще ОС как явление были весьма новы.

"наука и жизнь" в курсе была, если что.

Don't worry, I'll be by your side.
Old 29.04.2011, 21:49
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Originally Posted by ВедхийТип:
e => MySingleOrDefault
Что за "e"?

Приведи код в контексте. Не понятно, что на вход получает SingleOrDefault(), и почему функция GetById внутри MySingleOrDefault вдруг стала GetId.

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

---------------

Аргументы => Операторы


Code:
public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(e => MySingleOrDefault);
} 

разворачивается в

|
V

public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault( 
            delegate( TypeOf_e e) { return MySingleOrDefault( e ); } ) 
}

1. в лямбда-выражении не фигурирует аргумент id, по которому поиск осуществляется, а присутствует какой-то е
2. твоя функция MySingleOrDefault принимает 2 параметра, а должна 1 

либо лямбда-выражение должно быть таким:

public T GetById<T, K>(K id)
{
    return _dataContext.Entities.SingleOrDefault(id=> MySingleOrDefault);
}

protected bool MySingleOrDefault<T, K>(T element, K id)
{
/// ??? какой-то код
    T element = GetById<T, K>(id); //выбор элемента по id  
/// ??? какой-то код
/*
    PropertyInfo[] props = element.GetType().GetProperties();
    K elId = GetId<T, K>(props, element);
    if (elId.Equals(id))
        return true;
    return false;
*/
}
Добавлено через 5 минут
В общем, недостаточно входных данных ,чтобы разобраться и на вопрос ответить.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Last edited by Leledinn; 29.04.2011 at 21:49. Reason: Добавлено сообщение
Old 29.04.2011, 22:04
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
ну да, то я загнался с синтаксисом... :)

кароче суть такая:

есть базовый класс который реализует крад операции.

я справился со всеми, кроме - GetById

фишка в том, что в таблицах не всегда первичный ключь обозначается как Id. Это может быть что угодно. По этому нужен способ найти этот самый ключь.

GetId - это тот самый поиск ключае.

дальше сравнение, соответствует ли ключь переданного эл - искомому, и если да, то ... блин можно записать короче :)

ну в общем идея: сравнение ключа эл с искомым.

Это 2 параметра.

А делегат хавает только один.

Добавлено через 1 минуту
по идее функция SingleOrDefault вернет единственный эл, который будет удовлетворять услови - равенство ключа... которое я провожу... Но блин!
Last edited by ВедхийТип; 29.04.2011 at 22:04. Reason: Добавлено сообщение
Old 30.04.2011, 02:03
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Originally Posted by ВедхийТип:
А делегат хавает только один.
Кинь сюда описание полей, свойств методов своего CRUD-класса. Реализация методов не нужна.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Old 30.04.2011, 02:22
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
ну это точно врятли поможет :)

ну в принципе, я такое пишу часа за два. просто это линк а не хибер...
PHP Code:
public class BaseRepository<T,K>: IBaseRepository
{

 public 
Т Create<T>(T t
 {}

 public 
T Update<T>(T t
 {}

 public 
IQuerible<TGetAll() 
 {}

 public 
bool Delete<TK>(K id)
 {}
 public 
bool Delete<T>(T t
 {}

 
publiic T GetById<TK>(K id)

 protected 
virtual K GetId<T,K>(T t)
 {}

только особо к синтаксису не придераться - пишу по памяти и на гохе а не в редакторе. :)

ну кароче вот этот протектед метод нужен для GetById ... можешь мне поверитьь это сделано из лучших сообраджений маразма :)

ощем вот этот прикол

PHP Code:
public T GetById<TK>(K id)
{
    return 
_dataContext.Entities.SingleOrDefault(MySingleOrDefault);

должен определять соответствует ли переданный id для конкретной сущности которые он будет перебирать.

и по логике вещей это должно быть сравнение типа сущности Т и ее ключа с эталоном Id... но т.к. делегат принимает 1 параметр... я в замешательстве - как это использовать?
Old 30.04.2011, 20:33
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
По-моему ты сам себя запутал.

Тебе нужно вытащить некий 1 объект по его ключу. Но имя поля главного ключа либо неизвестно заранее, либо разное для разных таблиц в твоей БД.

Тебе нужно написать метод, который бы возвращал имя поля, являющегося главным ключом для данной сущности.

Т.е. если есть таблица Person

very_unusual_long_name_for_primary_key integer PRIMARY KEY,
FirstName varchar,
LastName varchar,
Age int,
...

то твой метод должен возвращать неким образом имя поля very_unusual_long_name_for_primary_key

после этого ты спокойно в делегат передашь логическое выражение, где будешь проверять условие: id == very_unusual_long_name_for_primary_key и получать искомый объект.

Тебе даже не придется СВОЙ делегат писать, обойдешься анонимным l-выражением:

id =>very_unusual_long_name_for_primary_key == id

Вопрос в том, можно ли как-то так работать с объектом-сущностью, чтобы можно было имя этого поля получить, зная тип.
И как метод GetById узнает, с каким типом сущности он будет иметь дело.

То идее, когда ты явно определяешь T, K в

T GetById<T, K>(K id)

метод GetById будет "в курсе" об этих типах

Далее: вот эта конструкция тоже "в курсе", что надо вызвать SingleOrDefault для сущности типа Т

_dataContext.Entities.SingleOrDefault, потому что возвращаемый тип явно указан для метода GetById

т.е. нам остается перед ее вызовом пределить имя поля первичного ключа конкретной сущности, написать вышеописанное l-выражение с id и передать его туда.

----------------------

Твоя задача: написать метод, который по типу Т сможет определять имя поля первичного ключа соотв. ему сущности в БД.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Old 30.04.2011, 20:42
Re: ADO.Net + C#
Originally Posted by Leledinn:
Вопрос в том, можно ли как-то так работать с объектом-сущностью, чтобы можно было имя этого поля получить, зная тип.
механизмы рефлексии это позволяют, если я правильно понял твою идею. но проблема, мне кажется, будет в том, что домен первичного ключа может быть не уникален, среди всех атрибутов.
Old 30.04.2011, 20:55
Leledinn's Avatar
Забаней
Join Date:
08.09.2005
Re: ADO.Net + C#
Originally Posted by Anquiatus:
механизмы рефлексии это позволяют, если я правильно понял твою идею. но проблема, мне кажется, будет в том, что домен первичного ключа может быть не уникален, среди всех атрибутов.
Задача: написать функцию, которая будет это поле определять среди прочих полей. Как это, возможно ли это - я хз. Я так глубоко не влезал еще. Скорее всего есть такой механизм. Я точно знаю, что можно это делать, используя механизмы самих СУБД. Я подозреваю, что это умеет делать JBDC и Hibernate. Я уверен, что если у конкурирующих платформ есть такая фича, то у .NET она ОБЯЗАНА быть.

Пропаганда нацелена на удобрение дерева, на котором растет плод нашего воображения. (с)
При каждом пробитии дна открываются новые горизонты развития. (народная мудрость)
...зато рыночек, джинсы, жвачка, колбаса и можно заграницу ездить без отчета коммисару в райком.. oh, wait...
Цель капитализма всегда одна: Эксплуатация. Гнет. Война. Чтоб народных масс нищета и гибель ему несли максимальную прибыль!
Old 02.05.2011, 02:14
ВедхийТип's Avatar
Предводитель
Join Date:
28.09.2007
Re: ADO.Net + C#
этот вопрос решает метод GetId =)

Там уже в нем все это реализованно. =) Делается через атрибуты

Я пока про это не думаю - есть другие более важные вопросы, например довести использование нинджекта до уровня рутины... но да ладно :)

Просто сам прикол в том. чтобы не писать лмбду для SingleOrDefaul, а написать другой метод, и передать имя туда. Вот.
Old 02.05.2011, 09:10
Re: ADO.Net + C#
В своё время слышал что язык Си это вообще шутка двух очень умных людей, но именно шутка. Или это очередное расхожее клише?

Играю в то, что сам не понимаю.
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off