بحث در مورد UI نبود.بحث در مورد استفاده کردن بود.
در ضمن در Web Formها نیز از امکاناتی شبیه به MVC میتوان بهره برد.(^)
در ضمن در Web Formها نیز از امکاناتی شبیه به MVC میتوان بهره برد.(^)
هر دو کلمه به معنی شبیه سازی هستند و ابزارهای شبیه سازی آنها را Simulator و Emulator مینامند.
به عنوان مثال این صفحه به شما پاسخ میدهد که چرا Android Emulator میگویند، نه Android Simulator
namespace FastReflectionTests { public class Test { public void Method1() { var x = 10; var y = 20; if (x == 10) { if (y == 20) { } } } public void Method2() { var x = 10; var y = 20; if (x == 10 && y == 20) { } } } }
.class public auto ansi beforefieldinit FastReflectionTests.Test extends [mscorlib]System.Object { // Methods .method public hidebysig instance void Method1 () cil managed { // Method begins at RVA 0x3bd0 // Code size 17 (0x11) .maxstack 2 .locals init ( [0] int32 x, [1] int32 y ) IL_0000: ldc.i4.s 10 IL_0002: stloc.0 IL_0003: ldc.i4.s 20 IL_0005: stloc.1 IL_0006: ldloc.0 IL_0007: ldc.i4.s 10 IL_0009: bne.un.s IL_0010 IL_000b: ldloc.1 IL_000c: ldc.i4.s 20 IL_000e: pop IL_000f: pop IL_0010: ret } // end of method Test::Method1 .method public hidebysig instance void Method2 () cil managed { // Method begins at RVA 0x3bf0 // Code size 17 (0x11) .maxstack 2 .locals init ( [0] int32 x, [1] int32 y ) IL_0000: ldc.i4.s 10 IL_0002: stloc.0 IL_0003: ldc.i4.s 20 IL_0005: stloc.1 IL_0006: ldloc.0 IL_0007: ldc.i4.s 10 IL_0009: bne.un.s IL_0010 IL_000b: ldloc.1 IL_000c: ldc.i4.s 20 IL_000e: pop IL_000f: pop IL_0010: ret } // end of method Test::Method2 .method public hidebysig specialname rtspecialname instance void .ctor () cil managed { // Method begins at RVA 0x3c0d // Code size 7 (0x7) .maxstack 8 IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret } // end of method Test::.ctor } // end of class FastReflectionTests.Test
IL_0000: ldc.i4.s 10 IL_0002: stloc.0 IL_0003: ldc.i4.s 20 IL_0005: stloc.1 IL_0006: ldloc.0 IL_0007: ldc.i4.s 10 IL_0009: bne.un.s IL_0010 IL_000b: ldloc.1 IL_000c: ldc.i4.s 20 IL_000e: pop IL_000f: pop
JSON: JavaScript Object Notation document :{ key: "Value", another_key: { name: "embedded object" }, some_date: new Date(), some_number: 12 } C# anonymous object var Document = new { Key= "Value", AnotherKey= new { Name = "embedded object" }, SomeDate = DateTime.Now(), SomeNumber = 12 };
using System.Collections.Generic; namespace RavenDBSample01.Models { public class Question { public string By { set; get; } public string Title { set; get; } public string Content { set; get; } public List<Comment> Comments { set; get; } public List<Answer> Answers { set; get; } public Question() { Comments = new List<Comment>(); Answers = new List<Answer>(); } } } namespace RavenDBSample01.Models { public class Comment { public string By { set; get; } public string Content { set; get; } } } namespace RavenDBSample01.Models { public class Answer { public string By { set; get; } public string Content { set; get; } } }
PM> Install-Package RavenDB.Client PM> Install-Package RavenDB.Server
using Raven.Client.Document; using RavenDBSample01.Models; namespace RavenDBSample01 { class Program { static void Main(string[] args) { using (var store = new DocumentStore { Url = "http://localhost:8080" }.Initialize()) { using (var session = store.OpenSession()) { session.Store(new Question { By = "users/Vahid", Title = "Raven Intro", Content = "Test...." }); session.SaveChanges(); } } } } }
<connectionStrings> <add name="ravenDB" connectionString="Url=http://localhost:8080"/> </connectionStrings>
The maximum number of requests (30) allowed for this session has been reached.
Raven is ready to process requests. Build 2700, Version 2.5.0 / 6dce79a Server started in 14,438 ms Data directory: D:\Prog\RavenDBSample01\packages\RavenDB.Server.2.5.2700\tools\Database\System HostName: <any> Port: 8080, Storage: Esent Server Url: http://localhost:8080/ Available commands: cls, reset, gc, q Request # 1: GET - 514 ms - <system> - 404 - /docs/Raven/Replication/Destinations Request # 2: GET - 763 ms - <system> - 200 - /queries/?&id=Raven%2FHilo%2Fquestions&id=Raven%2FServerPrefixForHilo Request # 3: PUT - 185 ms - <system> - 201 - /docs/Raven/Hilo/questions Request # 4: POST - 103 ms - <system> - 200 - /bulk_docs PUT questions/1
using (var session = store.OpenSession()) { var question1 = session.Load<Question>("questions/1"); Console.WriteLine(question1.By); }
using System; using Raven.Client.Document; using RavenDBSample01.Models; namespace RavenDBSample01 { class Program { static void Main(string[] args) { using (var store = new DocumentStore { Url = "http://localhost:8080" }.Initialize()) { using (var session = store.OpenSession()) { var question = new Question { By = "users/Vahid", Title = "Raven Intro", Content = "Test...." }; question.Answers.Add(new Answer { By = "users/Farid", Content = "بررسی میشود" }); session.Store(question); session.SaveChanges(); } using (var session = store.OpenSession()) { var question1 = session.Load<Question>("questions/1"); Console.WriteLine(question1.By); } } } } }
<TargetFramework>netcoreapp2.0</TargetFramework>
C:\Program Files\dotnet\store\x64\netcoreapp2.0
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> </ItemGroup>
و این تصویر، پوشهی نهایی قابل توزیع یک برنامهی ASP.NET Core 2.x را پس از publish نمایش میدهد:
در این حالت پوشهی نهایی نگارش 1x شامل 94 آیتم و پوشهی نهایی نگارش 2x شامل 13 آیتم است. یعنی حجم نهایی را که باید ارائه داد، به شدت کاهش یافتهاست.
I think that JavaScript's loose typing is one of its best features and that type checking is way overrated. TypeScript adds sweetness, but at a price. It is not a price I am willing to pay.
اما به مرور زمان این زبان توفیق بیشتری پیدا کرد تا اینکه امروز پروژههای بسیار جالبی با این زبان در حال توسعه هستند.
زبان Typescript نقاط قوت بسیاری دارد، از جملهی آنها میتوان به موارد زیر اشاره کرد:
در این مطلب تعدادی از این پروژهها را که برای خودم جذاب هستند، به شما معرفی میکنم.
ko.extenders.logOpt = function(target, option) { target.subscribe(function(newValue) { console.log(option + ": " + newValue); }); return target; };
this.firstName = ko.observable("Masoud").extend({logOpt: "my first name"});
my first name : Masoud
ko.extenders.negativeValueWarn = function (target, option) { target.hasWarning = ko.observable(); function warn(newValue) { if(newValue && newValue.substring) { newValue = parseFloat(newValue); } target.hasWarning(newValue < 0 ? true : false); } warn(target()); target.subscribe(warn); return target; };
target(NewValue) => فراخوانی به صورت تابع و پاس دادن مقدار جدید به آن
target() => فراخوانی به صورت تابع بدون آرگومان
ko.extenders["booleanValue"] = function (target) { target.formattedValue = ko.computed({ read: function () { if (target() === true) return "True"; else if (target() === false) return "False"; }, write: function (newValue) { if (newValue) { if (newValue === "False") target(false); else if (newValue === "True") target(true); } } }); target.formattedValue(target()); return target; };
<span>Do you want fries with that?</span> <label> <input type="radio" name="question" value="True" data-bind="value: myValue.formattedValue" /> Yes </label> <label> <input type="radio" name="question" value="False" data-bind="value: myValue.formattedValue" /> No </label>
this.myValue= ko.observable(false).extend({ booleanValue: null });