Дело не в xPDO (Это же что-то типа библиотеки ORM для PHP?). А дело в архитектуре вашей CMS.
Почему так много классов наследуют объект работы с БД? Где инкапсуляция? Где абстракция от ORM слоя? Почему modEvent, modActiveUser, modScript и т.д. могут невозбранно лезть в БД? Чем это лучше олдового кондового пхп где можно было в любом месте делать mysql_query?
Если весь этот ужас приправить примесями, боюсь даже представить, насколько усугубится этот бардак.
Подход TypeScript кажется более разумным. Хотя бы потому, что Dart не представляет удобных механизмов интеграции с уже написанным JS кодом, например, использование возможностей того же JQuery или других JS библиотек.
Одна из основных проблем в системах логирования это скорость. Необходимо, чтобы логирование как можно меньше замедляло программу.
У Вас информация о классе и методе берется программно из стека вызовов, что обычно очень неоптимально, и всякие библиотеки типа log4j не рекомендуют вообще пользоваться такой возможностью в критичных к скорости программах.
Ну и по мелочи. Ваши вспомогательные функции принимаютс Object… а значит на каждый вызов оборачивают свои аргументы в массив, что тоже не прибавляет скорости.
Да, признаю, с делегатами я ошибся.
Но к Func<...> аргумент по-прежнему применим.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var a = new A();
var b = new B();
var f1 = new A.PointComparator(b.compare);
var f2 = new A.PointDistanceFinder(b.compare);
Console.WriteLine(a.compare(f1, 2, 5));
Console.WriteLine(a.distance(f2, 2, 5));
Func<int, int, int> f = b.compare;
Console.WriteLine(a.compareF(f, 2, 5));
Console.WriteLine(a.distanceF(f, 2, 5));// <-- not correct use.
Console.Read();
}
}
class B
{
public int compare(int a, int b)
{
return a.CompareTo(b);
}
}
class A
{
public delegate int PointComparator(int x, int y);
public delegate int PointDistanceFinder(int x, int y);
public int compare(PointComparator pointComparator, int x, int y)
{
return pointComparator(x, y);
}
public int distance(PointDistanceFinder pointDistanceFinder, int x, int y)
{
return pointDistanceFinder(x, y);
}
public int compareF(Func<int,int,int> pointComparator, int x, int y)
{
return pointComparator(x, y);
}
public int distanceF(Func<int, int, int> pointDistanceFinder, int x, int y)
{
return pointDistanceFinder(x, y);
}
}
}
Спорное утверждение.
python3wos.appspot.com/
Процесс идет, медленно но верно.
Почему так много классов наследуют объект работы с БД? Где инкапсуляция? Где абстракция от ORM слоя? Почему modEvent, modActiveUser, modScript и т.д. могут невозбранно лезть в БД? Чем это лучше олдового кондового пхп где можно было в любом месте делать mysql_query?
Если весь этот ужас приправить примесями, боюсь даже представить, насколько усугубится этот бардак.
fossies.org/dox/modx-2.2.6-pl/classxPDOObject.html
fossies.org/dox/modx-2.2.6-pl/classmodAccessibleSimpleObject.html
И это вы считаете образцом хорошего ООП дизайна?
Не проще ли обойтись одним классом Животное с полем boolean дикое?
Аналогично, есть сомнения в необходимости остальных перечисленных классов.
dl.dropbox.com/u/4766398/tmp/freelansim.PNG
Можно еще XAMPP упомянуть тогда ru.wikipedia.org/wiki/XAMPP
vslisp.sourceforge.net/
Прям так мал. Maven это уже давно позволяет.
habrahabr.ru/post/113145/
Открывать и закрывать файл на каждую запись в него? Не думаю, что это хорошая идея…
У Вас информация о классе и методе берется программно из стека вызовов, что обычно очень неоптимально, и всякие библиотеки типа log4j не рекомендуют вообще пользоваться такой возможностью в критичных к скорости программах.
Ну и по мелочи. Ваши вспомогательные функции принимаютс Object… а значит на каждый вызов оборачивают свои аргументы в массив, что тоже не прибавляет скорости.
habrahabr.ru/post/71427/
Но к Func<...> аргумент по-прежнему применим.
->
>Вы, кстати, не видели type inference в каком-нибудь f#
Видел в Mercury. Думаю, там нечто похожее =)