PDA

View Full Version : OPEN MVC PLUS ENTITY FRAMEWORK AND WEBLIGHTS



baracudaProject
پنج شنبه 20 بهمن 1390, 23:11 عصر
Presentation
PowerPoint 2007


مطالبی در مورد Open MVC PLUS Framework و WebLights پیش از انتشار در CodeProject

همچنین مطالب در مورد WebLights که در چندین شرکت مهم کشورمان به عنوان سیستم پایه برای طراحی استفاده می شود نیز وجود دارد.

نکته:

لطفا از ذکر مطالب غیر فنی تحت هر شرایط خودداری فرمایید.

یا علی

22 بهمن ماه ، روز پیروزی خون بر شمشیر رو به همه ایرانیان عزیز تبریک می گویم.

baracudaProject
جمعه 21 بهمن 1390, 02:25 صبح
در مورد این پروژه:

این پروژه برای سیستم های گسترده و Enterprise طراحی شده است و یک مجموعه عظیم از کامپوننتها و مفاهیمی است که به نوعی تازه نیز هستند.

در صورتی که محصولی بزرگ و یا انترپرایز به روی دات نت و یا جاوا ارایه می کنید بهتر است حتما این پرزنتیشن را ببینید.

baracudaProject
جمعه 21 بهمن 1390, 18:03 عصر
در میان فناوری های موجود وب ، حضور استانداردهای فراگیر که عموما توسط نهاد W3C تدوین می شوند موجب سازگاری قابل توجهی بین موتورهای رندر وب گردیده است و مرورگرهای موجود روز به روز سازگاری بیشتری با یکدیگر پیدا می کنند.
طبیعت وب به گونه ای است که صفحات یا بر اساس اطلاعات دریافتی از سرویس دهنده و یا به صورت کامل توسط سرویس دهنده بر اساس فرمت HTML رندر شده و توسط مرورگرها به نمایش در می آیند اما صفحات وب به صورت پیش فرض صفحات ثابتی نیستند و با هر بار ارسال و دریافت اطلاعات معمولا بازیابی می شوند، حضور نسل جدید فریم ورک هایی که صفحات ثابت را در وب امکان پذیر می کنند و از Ajax برای دریافت و ارسال اطلاعات استفاده می کنند در طول چند سال اخیر موجب تحول قابل توجهی در تولید محصولات مبتنی بر وب گردیده است، صفحاتی که بار کمتری را به سرور وارد می کنند و در عین حال کاربر تجربه مشابهی با نرم افزارهای عادی Application تحت سیستم عامل دسکتاپ با آنها پیدا می کند.
تفاوت صفحات عمومی وب و محصولات کاربردی موجب گردید تا ایده جدید در ذهن من شکل بگیرد و آن را در چند سال گذشته به طور جدی پیگیری کنم، صفحاتی که تحت هیچ شرایط نیاز به بازیابی کامل نداشته باشند و در عین حال با طبیعت وب نیز سازگار باشند.
تولید محصول جدید نیاز به تجربه زیادی داشت ، من در گذشته و در زمان کار در یکی از شرکتهای مطرح تولید کننده محیطهای توسعه نرم افزار تجربه تولید کامپوننتهای مختلف را داشتم از این رو ، با آشنایی با ساختار این کامپوننتها تصمیم گرفتم آنها را با در نظر گرفتن تمامی جوانب به روی وب پیاده سازی کنم.

تجربه من نشان می داد که در بین ساختارهای موجود VCL یکی از کاربر پسند ترین و راحتترین روشهای پیاده سازی DataAware را ارایه کرده است، با ایده گرفتن از VCL که دلفی و سی ++ بیلدر بورلند مبتنی بر آن هستند تصمیم گرفتم ساختار جدید را پیاده سازی کنم به گونه ای که:
1- در وب به صورت مستقل عمل نماید و وابسته به زبان برنامه نویسی مورد استفاده در سرور نباشد
2- از ساختار مرکزی و بهینه سازی شده ای بهره گیری کند
3- مفاهیم DataAware در آن به آسانی قابل پیاده سازی باشند
4- تمامی کامپوننتها حتی درختواره ها با منطق مشابهی کار کنند
از این رو ، با استفاده کامل از جاوا اسکریپت ساختار کلاینت با مرکزیت مدل خاصی از کامپوننتها شکل گرفت که دارای بیشترین تشابه با VCL بودند و از هویت مستقلی بهره برده و امکان ارث بری به شیوه مشابه زبانهای برنامه نویسی ساخت یافته در آن فراهم گردد، ساختار کامپوننت مدلی که بر خلاف سایر سیستمهای موجود از نظم مشخصی بهره می برد و به شدت متمرکز است.
برای تبادل اطلاعات تمامی اطلاعات از طریق مدلی خاص از Connection که برای سازگاری نامحدود با کلیه استانداردهای تبادلی از جمله ,Restسرویس، Json و JavaScript SandBox که به طور خاص برای این کامپوننتها طراحی شده است تبادل می شوند، سایر ساختارها تکراری هستند پس این رابط ، امکان سازگاری با تمام روشهای تبادل اطلاعات فراهم گردید بدون آنکه نیاز باشد کامپوننتهای مرکزی دستخوش تغییر قابل توجهی شوند، نگهداری State در بهترین وضعیت در کلاینت و سرور امکان پذیر گردید و کمترین حجم تبادل اطلاعات موجب بهینه سازی صفحات و حجم کمتر آنها گردید.

ارتباط کلیه DataSet ها با سرور و یا سرورها از طریق Connection و ارتباط کلیه عناصر نمایشی با DataSet که نگهدارنده وضعیت یک مدل نیز هست از طریق یک واسط به نام DataSource با مفاهیم مشابه VCL فراهم می گردد، هم کلاینت هم سرور می توانند موقعیت مکانی رکورد مورد نظر کاربر را در اختیار داشته باشند و مفهوم Cursor در کلاینت سایت و سرور به صورت همزمان پیاده سازی گردید ، در ساختارهای درختی چند سطحی و یا XML که دارای تشابه نیز هستند همین موارد به بهترین نحو پیاده سازی گردید به نوعی که کاربر و یا توسعه دهنده هیچگاه با مسائل حاشیه ای آنها درگیر نمی شوند و عملیات کنترلی از جمله Validation نیز به صورت متمرکز در کلاینت و سرور بدون دخالت برنامه نویس در مراحل آن صورت می گیرد و نکته مهمتر اینکه : امکان تعریف تایپ های جدید و همینطور ساختار بهینه سازی شده نیز برای توسعه دهنده فراهم شد.

در سرور ، برای آنکه بتوان بهترین روش پیاده سازی را داشت ساختارهای دوگانه برای حفظ سازگاری با استانداردها پیاده سازی شد ، یکی از آنها امکان استفاده از ساختارهای StateLess مانند اکثر سیستم های وب ، و ذخیره و دریافت و ارسال اطلاعات به صورت استاندارد و همینطور ساختار Cache و یا نهانگاه سه سطحی که بتواند کمترین هزینه را از لحاظ زمانی و یا ارتباط با بانک اطلاعاتی داشته و در عین حال کاربری بهینه سازی شده را امکانپذیر کند، از طریق وجود این سیستم امکان کمترین میزان دسترسی مورد نیاز به سرور به وجود آمد به گونه ای که سرور تنها در صورت لزوم به بانک اطلاعاتی مراجعه و تنها تغییرات را دریافت می کند، برای مثال موارد حذف شده و یا تغییر کرده و یا اضافه شده و نیازی به فراخوانی تعداد زیادی رکورد و یا حتی استفاده از تکنیک Paging برای دریافت اطلاعات در اکثر موارد وجود ندارد.
ساختار بهینه سازی شده برای MVC من را به بازطراحی ساختار برای راحت تر شدن طراحی صفحات واداشت ، شباهت بیش از حد این مدل به MVVM و یا در مواردی MVP به دلیل مطالعه من برای بهینه سازی وضعیت اجرایی صفحات و طراحی آنها بود، به گونه که در این ساختار به جای یک مدل چند سطحی از یک متا مدل مشابه VIEW MODEL در MVVM استفاده می شود که خود شامل چندین مدل چند سطحی (سه بعدی) نیز هست ، این مدلها هرکدام به تنهایی به جای یک سطح در MVC استاندارد از سه سطح ستون، سطر و برگشتی (درختواره) به صورت پیش فرض پشتیبانی می کنند و در عین حال ، نیازی به وجود یک نگهدارنده مستقل اطلاعات نیز وجود ندارد چرا که این ساختار در مدل ادغام شده است .
این مدلها دارای ساختار ORM خود بوده و بسیاری از فرامین را به صورت مستقل نیز پشتیبانی می کنند، طراحی این ساختار در سه سطح پیاده سازی شده است:
1- مدل فیزیکی یا جدول های موجود در RDBMS یا XML به صورت دریافت Schematic به صورت مستقیم
2- مدل فیزیکی سطح دوم که برای ایجاد بانک اطلاعاتی و یا تطبیق آن نیز مورد استفاده قرار میگیرد
3- مدل منطقی سطح 1 که به صورت Mapping یک مدل تجاری به روی یک یا چندین مدل فیزیکی در فرمت XML مخصوص صورت می گیرد
4- مدل منطقی سطح 2 که امکان مشخص کردن وضعیت را به صورت کد سخت و گذاشتنAnnotation و یا Attribute و به روی فیلدها و یا سایر عناصر کلاس فراهم می کند.
طبیعی است که به صورت پیش فرض ، کلیه عملیات درج ، به روزرسانی و حذف و همینطور دریافت اطلاعات به صورت کاملا خودکار صورت می گیرد اما در عین حال امکان سازگاری مطلق با Stored Procedures و یا کد دستی نیز فراهم گردیده است.
کلیه عملیات اتصال Master/Detail بین مدلهای منطقی به صورت خودکار و تنها با مشخص کردن نقش آنها مشخص می گردد و سطوح منطقی به آسانی این موضوع را پشتیبانی می کنند.
در این مدل ، امکان پیاده سازی سطوح حفاظتی در سطوح ذیل وجود دارد:
1- Area
2- Meta Model
3- Model
4- Row
5- Column
بر اساس منطق پیاده سازی امنیت در سیستم ، کاربر به راحتی می تواند از بالاترین تا پایین سطح را مدیریت کند و برای مثال حتی دسترسی به یک Row خاص و یا یک Column خاص را برای یک ، یا گروهی از کاربران محدود کند، یک فیلد را فقط نمایشی و یا یک فیلد را فقط نوشتی مشخص کند و در عین حال اینکار را به آسانی و بدون نوشتن کد انجام بدهد، چنین موضوعی در سیستمهای موجود وجود ندارد و پیاده سازی آن نیازمند زحمات زیادی است.

baracudaProject
جمعه 21 بهمن 1390, 18:04 عصر
وجود پروفایلها و نقش ها در سیستم پیاده سازی ساختار امنیتی فریم ورک را آسانتر کرده است ، امکان پیاده سازی فرامین با استفاده از زبان واسطه Expression مخصوصی که شباهت تام با SQL نیز دارد و فیلتر سازی آنها وجود دارد نیز هست، نکته مهم اینکه مدلها در سرور همیشه در وضعیت Synchronized با کلاینت قرار دارند و وضعیت آنها را نیز نگهداری می کنند البته در صورتی که کاربر آنهارا به صورت StateFull تنظیم کرده باشد.
این مدلها همیشه در حالت فیلتر شده / مرتب شده و درختواره در صورتی که ساختار بازگشتی باشد قرار دارند و برنامه نویس به آسانی به آنها در حالت های فوق دسترسی دارد.
فرامینی مانند Validation نیز به آسانی از طریق مدلها از فیزیکی تا سطح منطقی تنظیم می شوند ، برای مثال لازم نیست شما نوع یک فیلد را اعلام کنید چرا که به صورت خودکار در کلاینت و سرور هر دو ، Validation های مورد نیاز ایجاد می شوند و در دو مرحله در مورد محتوای رکورد ارسالی Validation صورت می گیرد و به عبارتی ، در اکثر موارد از ارسال اطلاعات غیر ضروری به سطوح پایینتر جلوگیری می شود و کاربر پیش از ارسال ، کلیه اطلاعات را تکمیل و آنها را ارسال می کند.
Logical Model : AutoGenerated in C#‎‎ Version

[WLMOAdapter(WLAdapterType.MSSQL, ConnectionString: "Data Source=RYAN-PC\\RYAN;Initial Catalog=RYANTEST;Integrated Security=True")]
[WLMOTableInfo("address;person;addresstype")]
public class Address : WLModel
{
[WLFField(dbFieldName: "Address.Address")]
[WLFDisplayName("ryan", Language: WLLanguages.Default)]
public string FullAddress
{
get { return (string)this["RealAddress"]; }
set{ this["RealAddress"] = value; }
}
[WLFField(dbFieldName:"PersonID")]
[WLFForeignKey("Person", "PersonID")]
public string PersonID
{
get
{
return this["PersonID"];
}
set
{
this["PersonID"] = value;
}
}

[WLFField(dbFieldName: "AddressType.AddressType")]
public string AddressType
{
get
{
return this["AddressType"];
}
set
{
this["AddressType"] = value;
}

}
[WLFField(dbFieldName: "Person.Name")]
public string Name
{
get
{
return this["Name"];
}
set
{
this["Name"] = value;
}

}

[WLFField(dbFieldName: "Address.AddressID")]
public string AddressIDe
{
get
{
return this["AddressID"];
}
set
{
this["AddressID"] = value;
}

}

public Address(WLBaseMetaModel metamodel, string profile)
: base(metamodel, profile)
{
}
}


Meta Model: AutoGenerated in C#‎‎ Version
[WLMMDefaultProfile("Administrator*.*")]
public class metamodel : WLBaseMetaModel
{
[WLMODisplay("آدرس")]
[WLMOAutoCreate]
public Address Address { get; set; }
[WLMODisplay("کاربر")]
public Person Person { get; set; }
}

Physical Mapping
<?xml version="1.0" encoding="utf-8" ?>
<WLPhysicalSchema>
<class NameSpace="" LogicalName="" TableName="" LazyLoading="">
<Commands>
</Commands>
<Authentication>
<Rule Profile="" Commands=""/>
<Profiles Commands=""/>
<CustomRole/>
<AccessLevel Name="Ryan1" Profile="Ryan2" Commmands=" "/>
</Authentication>
<Description Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</Description>
<Keys>
<Key TableName="" Name="" type ="PrimaryKey" IsUnique="" IsColumnStoredIndex="true">
<Fields>
<Field ColumnName="R" SourceColumn="" TargetColumn=""/>
</Fields>
</Key>
</Keys>

<Relations>
<Relation TableName="" Name="" Key="" SourceModel="" TargetModel="" SourceTable="" TargetTable="" ContstraintName="" Type="Identifying" Cardinality="One_Zero" CardinalityTo="" JunkTable="">
<ParentActions Update="Restrict/Cascade/Update" Delete="Restrict/Cascade"/>
<ChildActions Update="Restrict/Cascade" Delete="Restrict/Cascade"/>
</Relation>
</Relations>

<Fields>
<Field AttributeName="A" ColumnName="" Type="" Order="" IsPrimaryKey="True" Width="">
<Validators>
<Validator Name="" Profile="" Value=""/>
</Validators>
<DisplayName Profile="" Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</DisplayName>
</Field>

<Field AttributeName="A" ColumnName="" Type="string" Order="" IsPrimaryKey="True" Width="">
<Validators>
<Validator Name="" Profile="" Value=""/>
</Validators>
<DisplayName Profile="" Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</DisplayName>
</Field>

</Fields>
</class>
</WLPhysicalSchema>



Logical Mapping for Business Models:
<?xml version="1.0" encoding="utf-8" ?>
<WLLogicalSchema>
<class NameSpace="" LogicalName="" TableName="" LazyLoading="">
<Tables >
<table Name="" JunkTable="true"/>
</Tables>
<Commands>
</Commands>
<Authentication>
<Rule Profile="" Commands=""/>
<Profiles Commands=""/>
<CustomRole/>
<AccessLevel Name="Ryan1" Profile="Ryan2" Commmands="fafsdafsd"/>
</Authentication>
<Description Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</Description>
<Keys>
<Key TableName="" Name="" type ="PrimaryKey" IsUnique="" IsColumnStoredIndex="true">
<Fields>
<Field ColumnName="R" SourceColumn="" TargetColumn=""/>
</Fields>
</Key>
</Keys>

<Relations>
<Relation TableName="" Name="" Key="" SourceModel="" TargetModel="" SourceTable="" TargetTable="" ContstraintName="" Type="Identifying" Cardinality="One_Zero" CardinalityTo="" JunkTable="">
<ParentActions Update="Cascade" Delete="Cascade"/>
<ChildActions Update="Restrict " Delete=" Cascade"/>
</Relation>
</Relations>

<Fields>
<Field AttributeName="A" ColumnName="" Type="" Order="" IsPrimaryKey="True" Width="">
<Validators>
<Validator Name="" Profile="" Value=""/>
</Validators>
<DisplayName Profile="" Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</DisplayName>
</Field>

<Field AttributeName="A" ColumnName="" Type="string" Order="" IsPrimaryKey="True" Width="">
<Validators>
<Validator Name="" Profile="" Value=""/>
</Validators>
<DisplayName Profile="" Language="">
<Caption Profile="" ></Caption>
<Hint Profile="" ></Hint>
<Help></Help>
</DisplayName>
</Field>

</Fields>
</class>
</WLLogicalSchema>


همانطور که می بینید برنامه نویس تنها با پیاده سازی ساختار بانک اطلاعاتی از امکانات سیستم استفاده می کند و با کمترین حجم کد ممکن به نتایج مورد نظر خود دست می یابد.
شاید مهمترین چیزی که کاربر نیز مزیت آن را حس خواهد کرد ارسال و دریافت اطلاعات به صورت گروهی است به گونه که کلاینت می تواند تعداد نامحدودی رکورد را به صورت همزمان به سرور ارسال نماید، گرچه برای کنترل فعالیت کاربر این قابلیت محدود شده است و می بایست آن را به صورت موردی فعال کنید (مواردی که درج گروهی صورت می گیرد) ، سیستم همچنین به صورت خودکار فعالیت غیر مجاز را تشخیص می دهد و با ارسال تصویر خاصی از کاربر می خواهد که حروف مشخص در تصویر را تایپ و انسان بودن (به معنی جلوگیری از فعالیتهای خودکار ) کاربر را مشخص کند.



ساختار سیستم ، امکان عملکرد به روی منابع ذیل را فراهم می کند:
1- حمایت از کلیه تایپهای استاندارد موجود (35 تایپ مختلف ) از جمله String, Integer and Floating به همراه فیلدهای XML (String or XML in RDBMS(
2- پشتیبانی از کلیه RDBMS های موجود در ORM و همینطور بانک اطلاعاتی XML
3- Validation کامل در سه سطح و امکان پیاده سازی بهینه سازی شده
4- Full State and Stateless Models

وجود نهانگاه سه لایه ، سرعت عملکرد سیستم را بهتر نیز کرده است:
1- Application Server Cache Level 1
2- Application Server Cache Level2
3- Client Side Cache
در حقیقت سیستم تنها در صورت لزوم ، تغییرات را دریافت خواهد کرد و هیچگاه اطلاعاتی که مورد نیاز نیستند را دوبار دریافت نمی کند.


یکی از نکات مهمی که در طراحی این سیستم به کار رفته است این است که برنامه نویس تحت هیچ شرایط نمی بایست تاریخ شمسی و یا تایلندی را به کلاینت ارسال کند، تاریخ ها در کلاینت و در زمان نمایش به شمسی و یا تایلندی و همینطور قمری تبدیل می شوند و در زمان ارسال به سرور به صورت خودکار به فرمت صحیح در می آیند، این مزیت بزرگی برای طراحی آسانتر سیستمهای گسترده است به نوعی که برنامه نویس تحت هیچ شرایط با تایپ هایی مانند تاریخ و زمان درگیر نخواهد بود.
نمونه ای از درخواست ایجاد شده توسط ORM داخلی فریم ورک در سرور که به صورت خودکار صورت می گیرد ، کاربر تنها می بایست فیلدهای مورد نیاز خودرا مشخص کند، سیستم در صورت نیاز می تواند به صورت خودکار Indexed View لازمه را ایجاد کند و از آن استفاده کند، درایور MSSQL
select Address.Address as FullAddress,address.PersonID as PersonID,AddressType.AddressType as AddressType,Person.Name as Name,Address.AddressID as AddressIDe,Address.City as Address_City,Person.PersonID as Person_PersonID,AddressType.AddressTypeID as AddressType_AddressTypeID from address
INNER JOIN Person ON Person.PersonID=Address.PersonID INNER JOIN AddressType ON AddressType.AddressTypeID=Address.AddressTypeID where Address.City=21

سیستم ORM داخلی سیستم، قابلیت توسعه قابل توجهی دارد و می تواند از سایر ORM های موجود نیز به صورت بهینه سازی شده استفاده کند، با این حال تقریبا در هیچ موردی کاربر نیاز به استفاده از سایر ORM ها برای بهبود وضعیت کاری خود ندارد.
فریم ورک سرور به خصوص در نسخه دات نت ، از قابلیتهای فوق العاده زیادی بهره می برد و به نوعی ، کاربر نیاز به استفاده از سایر ORM ها نخواهد داشت.
مفاهیم گسترده ای که در مدلهای سه بعدی پیاده سازی شده اند، امکان گسترش و پیاده سازی این مفاهیم و همینطور استفاده بهینه از آن هارا فراهم می آورد، در تمامی موارد ، هم سرور و هم کلاینت از اطلاعات موجود خبر دارند و وجود سه لایه حفاظتی جلوی درج غیر مجاز اطلاعات و همینطور دسترسی غیر مجاز به اطلاعات را می گیرد ، این لایه های حفاظتی بر اساس استاندارد ISO 27001 و برای بهینه سازی عملکرد سیستم توسعه داده شده اند.

کاربر می تواند سطوح حفاظتی را به آسانی در سطوح ، متا مدل ، مدل ، سطر و ستون و سطح در درختواره ها و همینطور وضعیت ترکیبی فیلدها تعریف کند و از عدم امکان نفوذ به سیستم در صورت معرفی صحیح سطوح مطمئن باشد.

در مدل دیتا سنتریک ، تقریبا کاربر هیچ نیازی به برنامه نویسی در کلاینت برای دریافت و ارسال اطلاعات ندارد چرا که تمامی فرامین به آسانی برای کلاینت قابل شناسایی هستند و نیاز به نوشتن کد خاصی نیست ، تنها کاربر می بایست با مفهوم دیتا سنتریک آشنایی دقیقی پیدا کند چرا که در این مدل کامپوننتهای نمایشی هیچ وظیفه ای برای دریافت اطلاعات ندارند و اطلاعات دریافتی و ارسال شده به صورت مرکزی مدیریت می شوند.


وجود مدلهای داینامیک به صورت پیش فرض :

کلیه مدلها به صورت پیش فرض کاملا داینامیک تعریف شده اند به این معنی که امکان ایجاد کلیه مدلها در زمان RUNTIME وجود دارد که قابلیتهای بی شماری به توسعه دهنده و کاربر ارایه می کند.

baracudaProject
جمعه 21 بهمن 1390, 18:05 عصر
کامپوننتهای موجود :
درختواره:
Standard Tree,TreeGrids , Vertical Organization Chart, Horizontal organization chart, Menues
منوها:
Popup Menues (each component might have a pop up menu), Menues ,Ribbon controls
جدول :
Grid, Group By Grids , Template Grids , Editable Grids
ویرایش :
AutoComplete, LookUp, Text, CheckBoxes, RadioGroups , ComboBoxes
فرامین:
MetaModel Commands , Model Commands , Specific Commands
عمومی:
Window (in 10 different models) , 10 Different type of Panels, PageControls, TabControls
حمایت کامل از کیبورد به گونه که شبیه ترین وضعیت به Applicationها به وجود می آید.
Navigation Controls امکان مدیریت مدلها و اطلاعات درون آنهارا فراهم می آورند.
در کل بیش از 185 کامپوننت در سیستم تعبیه شده است.
تمامی کامپوننتها از javaScript Sandbox حمایت می کنند به این معنی که برای بازیابی خطی آنها نیازی به استفاده از IFRAME نیست.
در تمامی موارد اطلاعات تنها در صورت نیاز به کلاینت ارسال می شوند که این موضوع باعث سبک شدن صفحات نیز می گردد.
امکان Drag and Drop بین تمامی عناصر صفحات و Model های مختلف
خروجی ها در صورت لزوم ، CSV , Excel and PDF به صورت پیش فرض و همینطور امکان حمایت از سیستم های گزارشگیری استاندارد + 12 نوع خروجی دیگر از جمله XML
امکان تعبیه ورودی از فرمت XML و خروجی به آن فراهم گردیده است.

در تصویر بالا ، زمان مورد نیاز برای توسعه در یک سیستم مشابه در مدلهای موجود پیاده سازی موجود مقایسه شده است ، زمان بر اساس ساعت و کمتر به معنی بهتر است.