نوشته شده توسط : عباسی

تا قبل از این در زمینه‌ی شیوه تبدیل JSON در NET Core. حرف کردیم. طراحی اپلیکیشن بیشتر آن را به‌این عامل نوشتیم که پندار می‌کردیم اشخاص برای عمل با JSON خویش را به مشقت می‌اندازند.


ما فکر می کنیم شغل با XML یه خرده متعدد میباشد. هنوز کتابخانه استاندارد خیر برای شغل با XML نیست.

برخلاف JSON که دارنده کتابخانه JSON.NET که برای رئیس هر چیزی میباشد، بیشتر مورد ها هنگامی با XML شغل می کنید، از یکی‌از Parserهای داخلی XML در قاب‌ورک NET Core. استعمال خواهید کرد. این‌ها ممکن میباشد پاره ای ناامیدکننده باشند. برخی از این مفاد این میباشد که آنان در اوایل ایجاد کرد NET. ساخت گردیده‌اند و به همین عامل، مدام بایستی با موردها قبل سازگار باشند به این ترتیب شما در چیزهایی مثل Generics ناکامی می‌خورید. آیتم دیگر این میباشد که خصوصیات حقیقی وواقعی XML که دربرگیرنده مواقعی مانند فضای اسم‌ها (namespace) و DTDها میگردد، گرچه در بالا معمولی به حیث می رسد، ولی می تواند فوق‌العاده خشن باشد. مراد ما از خشن این میباشد که در حالتی که تنها یک قطعه از جورچین را از دست بدهید، تمامی چیز به آسانی فعالیت نخواهد کرد و ممکن میباشد ساعت ها ارتفاع بکشد تا مشاهده کنید چه چیزی نادرست میباشد.

به هر درحال حاضر، بیاید سریع برویم و آیتم‌های مرتبط با شغل با XML در NET. را تحقیق کنیم.

مثالی برای پوشه XML

ما می خواهیم از یک پوشه XML خیلی معمولی استعمال کنیم که دارنده المنت، پراپرتی اتربیوت و یک لیست میباشد. ما هنگام نظارت مورد‌ها از این مورد ها استعمال میکنیم، بدین ترتیب مدام عملکرد میکنیم فولدر شبیه‌ای را بخوانیم.

 

Abc


1
2
3


استعمال از XMLReader

بهتر او‌لین مورد‌ای که داریم استعمال از کلاس \" XMLReader\" میباشد. این تنها یک XML Parser رو به جلو میباشد (مراد ما این میباشد که فولدر را به طور تقریب خط به خط میخواند). این آیتم خیلی ابتدایی میباشد. به عنوان مثال کد شما ممکن میباشد خیلی مشابه بدین باشد:

XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreWhitespace = true;

using (var fileStream = File.OpenText(\"test.xml\"))
using(XmlReader reader = XmlReader.Create(fileStream, settings))
{
while(reader.Read())
{
switch(reader.NodeType)
{
case XmlNodeType.Element:
Console.WriteLine($\"Start Element: {reader.Name}. Has Attributes? : {reader.HasAttributes}\");
break;
case XmlNodeType.Text:
Console.WriteLine($\"Inner Text: {reader.Value}\");
break;
case XmlNodeType.EndElement:
Console.WriteLine($\"End Element: {reader.Name}\");
break;
default:
Console.WriteLine($\"Unknown: {reader.NodeType}\");
break;
}
}
}
با خروجی مانند این:

Unknown: XmlDeclaration
Start Element: MyDocument. Has Attributes? : True
Start Element: MyProperty. Has Attributes? : False
Inner Text: Abc
End Element: MyProperty
Start Element: MyAttributePropety. Has Attributes? : True
Start Element: MyList. Has Attributes? : False
Start Element: MyListItem. Has Attributes? : False
Inner Text: 1
End Element: MyListItem
Start Element: MyListItem. Has Attributes? : False
Inner Text: 2
End Element: MyListItem
Start Element: MyListItem. Has Attributes? : False
Inner Text: 3
End Element: MyListItem
End Element: MyList
End Element: MyDocument
این آیتم یادآور به کارگیری از ADO.NET و تلاوت سطر به سطر داده‌ها و عملکرد برای انبارکردن آن در یک آبجکت میباشد. ایده کلی به‌این عامل میباشد که به طور خط به خط تبدیل را اجرا می‌دهید، و یاد کمتری داراست. ولی شما همینطور می بایست هر خط را به طور غیروابسته با هر تعداد جایگشت از موادسازنده، اتربیوت‌ها، لیست‌ها و غیره مدیر فرمایید. ما فکرمی کنیم صرفا ادله به کار گیری از این روال می تواند در حالتی‌که باشد که شما فولدر‌های خیلی والا XML را دارید (بیشتر از 100 مگابایت) یا این که در ادامه موردها بسیار خاص میباشید. به عنوان مثال تنها میخواهید یک عنصر را از پوشه بخوانید، و زمانی در‌پی آن یک عنصر می باشید، نمیخواهید تمامی چیز را بار گذاری نمایید.

نکته دیگری که می خواهیم به آن اشاره کنم این میباشد که فضای اسم‌های XML و اختلال پیرامون آنان همپا با XMLReader نیستند.

به کارگیری از XPathDocument/XPathNavigator

بهتر طرز دیگر اخذ گره‌های (Node) اختصاصی XML که می تواند یک مدرک را کاوش نماید، به کارگیری از آبجکت XPathNavigator میباشد.

آغاز، کد را ببینیم:

using (var fileStream = File.Open(\"test.xml\", FileMode.Open))
{
//Load the file and create a navigator object.
XPathDocument xPath = new XPathDocument(fileStream);
var navigator = xPath.CreateNavigator();

//Compile the query with a namespace prefix.
XPathExpression query = navigator.Compile(\"ns:MyDocument/ns:MyProperty\");

//Do some BS to get the default namespace to actually be called ns.
var nameSpace = new XmlNamespaceManager(navigator.NameTable);
nameSpace.AddNamespace(\"ns\", \"http://www.dotnetcoretutorials.com/namespace\");
query.SetContext(nameSpace);

Console.WriteLine(\"My Property Value : \" + navigator.SelectSingleNode(query).Value);
}
در شرایطی که بخواهیم صادقانه بگوییم این کد نیکی وجود ندارد، و به یک استدلال میتوانیم بگوییم که بد میباشد. فضای اسم‌ها در اینجا حقیقتا منجر زحمت می شوند. در امر خاص ما، از آنجایی که ما یک فضای اسم پیش‌فرض (default namespace) داریم، این فقط راهی بود که می‌توانستیم با XPath فعالیت کنیم. سوای فضای اسم امور حقیقتا به سهولت ایفا می گردند. قادر خواهیم بود بگوییم در هنگام شغل با XML هر دردسری که تا به حالا داشته‌ایم به خیال فضای اسم‌ها بوده میباشد.

بدین ترتیب اذن دهید موردی را به شما بیان کنم. درصورتی که سندی که با آن عمل می کنید از فضای اسم‌ها به کارگیری نمی‌نماید (یا این که مایل به حذف آنها می باشید)، و می بایست از اکسپشن XPath برای اخذ یک گره به کارگیری فرمایید، پس به کارگیری از XMLNavigator در واقع مورد بدی وجود ندارد.

به کارگیری از XMLDocument

XMLDocument میتواند مانند آپ تو دیت رسانی XPathNavigator خلق و خوی نماید. این چندین روال معمولی‌خیس برای بارگذاری کردن سندها داراست، و به شما قابلیت و امکان می دهد XMLDocuments را در یاد نیز اصلاح فرمائید.

XmlDocument document = new XmlDocument();
document.Load(\"test.xml\");

XmlNamespaceManager m = new XmlNamespaceManager(document.NameTable);
m.AddNamespace(\"ns\", \"http://www.dotnetcoretutorials.com/namespace\");
Console.WriteLine(document.SelectSingleNode(\"ns:MyDocument/ns:MyProperty\", m).InnerText);
کلاً شما هنوز هم بایستی با برخی فضای اسم‌ها راز و شغل داشته باشید (برای مثال Default Namespaces به خیر و خوبی رئیس نمی شود)، و شما هنوز هم بایستی هر عنصر را طبق نیاز خویش یک به یک اخذ فرمایید. ولی در صورتی‌که می خواهید تنها یک ذیل تیم خرد از XML را بار گذاری فرمایید، این مورد نیکی میباشد. این حقیقت که میتوانید XML را تغییر‌و تحول دهید و آن را در پوشه ذخیره نمایید نیز یک آیتم بهتر میباشد.

به کارگیری از XMLSerializer

به حیث ما XMLSerializer شایسته ترین مورد برای تبدیل XML در NET Core. میباشد. در صورتیکه پیش از این از JSONDocument از JSON.NET به کار گیری کرده‌اید، فعال سازی آن خیلی مشابه میباشد.

آغاز به آسانی یک کلاس ساخت میکنیم که از پوشه XML صورت گرفته میباشد. ما از دسته‌ای از اتربیوت‌ها برای معلوم کردن روش تلاوت مدرک، اینکه از کدام فضای اسم استعمال میکنیم، حتی اینکه کدام نوع عنصر را برای deserialize آزمون میکنیم (اتربیوت، عنصر یا این که آرایه)، به کارگیری میکنیم.

[XmlRoot(\"MyDocument\", Namespace = \"http://www.dotnetcoretutorials.com/namespace\")]
public class MyDocument
{
public string MyProperty { get; set; }

public MyAttributeProperty MyAttributeProperty { get; set; }

[XmlArray]
[XmlArrayItem(ElementName = \"MyListItem\")]
public List MyList { get; set; }
}

public class MyAttributeProperty
{
[XmlAttribute(\"value\")]
public int Value { get; set; }
}
حقیقتا بی آلایش میباشد. و بعد XML را خوانده و آن را به‌این کلاس تبدیل میکنیم:

using (var fileStream = File.Open(\"test.xml\", FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyDocument));
var myDocument = (MyDocument)serializer.Deserialize(fileStream);

Console.WriteLine($\"My Property : {myDocument.MyProperty}\");
Console.WriteLine($\"My Attribute : {myDocument.MyAttributeProperty.Value}\");

foreach(var item in myDocument.MyList)
{
Console.WriteLine(item);
}
}
این آیتم فارغ از همت برای اخذ فضای اسم صحیح، سوای سعی برای صحیح عمل کردن Xpath، فعالیت می‌نماید. احتمالا هنگامی استارت به استعمال از XMLSerializer می کنید، تعجب خواهید کرد که چرا تا به درحال حاضر خویش را به زحمت انداخته و کوشش کرده‌اید تا مجدد به طور دستی مستندات XML را بخوانید.

فعلا یک اخطار تبارک وجود دارااست. در شرایطی که حقیقتا به نصیب بزرگی از مستندات اعتنا نمی کنید و صرفا عملکرد می کنید تا یک عنصر عمیق را اخذ فرمائید، ساخت‌و‌ساز این کلاس‌ها و سبک‌های تبارک صرفا برای اخذ یک عنصر می تواند شمارا به زحمت متعددی بیاندازد.

با این حالا، در 99% موردها، از XMLSerializer برای تبدیل XML استعمال نمایید. نسبت به آیتم‌های دیگر کمتر آسیب پذیر میباشد و الگوی بسیار شبیه‌ای را برای JSON serialization دنبال می‌نماید که بدین معناست که هر هر کس با یکی این‌ها شغل نموده باشد، قادر است با دیگری نیز شغل نماید.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 63
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : شنبه 31 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی


LINQ تحت عنوان یک گویش کارکشته برای رئیس داده ها به .NET اضافه شد. طراحی اپلیکیشن برای مثال LINQ to SQL با استعمال ازEntity Framework به شما این قابلیت و امکان را میدهد با DBMS به سهولت کلام فرمایید. البته اکثر زمان ها هنگام استعمال از آن، توسعه و گسترش‌دهندگان فراموش می‌نمایند که پژوهش نمایند چه نوع query SQl ای به وسیله provider ای که امکان کوئری زدن دارااست، ساخت میگردد (در نمونه ما Entity Framework). درین نوشته ی علمی ما رسیدگی خوا هیم کرد که به چه شکل خواهیم توانست کارایی کوئری‌های LINQ را باصرفه کنیم.


پیاده سازی

بیایید با به کارگیری از یک نمونه دونکته اساسی را تحقیق کنیم.

آغاز بایستی مقر داده Test را در SQL Server تولید کنیم. در‌این دیتابیس با اجرای کوئری تحت دو جدول ساخت و ساز خوا‌هیم شد.

USE [TEST]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Ref](
[ID] [int] NOT NULL,
[ID2] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[InsertUTCDate] [datetime] NOT NULL,
CONSTRAINT [PK_Ref] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Ref] ADD CONSTRAINT [DF_Ref_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
GO

USE [TEST]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Customer](
[ID] [int] NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Ref_ID] [int] NOT NULL,
[InsertUTCDate] [datetime] NOT NULL,
[Ref_ID2] [int] NOT NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_Ref_ID] DEFAULT ((0)) FOR [Ref_ID]
GO

ALTER TABLE [dbo].[Customer] ADD CONSTRAINT [DF_Customer_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]
GO
هم اکنون جدول Ref را به یاری script ذیل پرمی کنیم. طاقت فرمایید... ما تنها یک script را ایفا کردیم ولی آن را ذخیره نکردیم. در اینگونه مواقعی، SQL Complete به یاری Devart بسیار ریلکس خواهد بود، که با SSMS و Visual Studio ترکیب میشود و دارنده خصوصیت Execution History میباشد.

 

این تلاش تاریخچه انجام گردیده کوئری ها در SSMS را اکران می‌دهد.

 

دقت فرمایید پنجره از موادسازنده پایین ساخته شده میباشد :

1. جعبه کاوش برای غربال کردن حاصل

2. جعبه دامنه تاریخ برای غربال کردن حاصل

3. نتیجه ها ارائه گردیده در یک جدول. می‌توانید اطلاعات را مطابق ردیف های این جدول تر و تمیز نمائید (با به کارگیری از کلید SHIFT می‌توانید دسته ای از ردیف ها را برای نظم دهی گزینش فرمائید)

4. کد ستون تعیین گردیده

جدول سود دربردارنده تاریخچه اسکریپت های ایفا گردیده در SSMS میباشد و جداول ذیل را مشتمل بر می‌گردد:

Status .1: علامت میدهد که اسکریپت با توفیق ایفا گردیده یا این که نه

Query Text .2: کد اسکریپت

Size (Bytes) .3: اندازه متن در واحد بایت

Executed On .4: تاریخ و ساعت اسکریپت ایفا گردیده

Duration .5: زمان فرصت اجرای اسکریپت

File .6: اسم یک فولدر یا این که زبانه در SSMS و هم پا با اسم مثال SQL Server که اسکریپت روی آن اعمال گردیده است

Server .7: اسم مثال SQL Server که اسکریپت روی آن جاری ساختن گردیده است

User .8: ورود به سیستم ذیل اسکریپت ایفا گردیده

Database .9: بستر مقر داده ای که اسکریپت در آن انجام گردیده است

ما میتوانیم کوئری ما یحتاج را در‌این جدول پیدا کنیم،

USE [TEST]
GO

DECLARE @ind INT=1;

WHILE(@ind<1200000)
BEGIN
INSERT INTO [dbo].[Ref]
([ID]
,[ID2]
,[Name])
SELECT
@ind
,@ind
,CAST(@ind AS NVARCHAR(255));

SET @ind=@ind+1;
END
GO
به روشی شبیه، میتوانیم جدول مشتری را با استعمال از اسکریپت پایین لبریز کنیم

USE [TEST]
GO

DECLARE @ind INT=1;
DECLARE @ind_ref INT=1;

WHILE(@ind<=12000000)
BEGIN
IF(@ind%3=0) SET @ind_ref=1;
ELSE IF (@ind%5=0) SET @ind_ref=2;
ELSE IF (@ind%7=0) SET @ind_ref=3;
ELSE IF (@ind%11=0) SET @ind_ref=4;
ELSE IF (@ind%13=0) SET @ind_ref=5;
ELSE IF (@ind%17=0) SET @ind_ref=6;
ELSE IF (@ind%19=0) SET @ind_ref=7;
ELSE IF (@ind%23=0) SET @ind_ref=8;
ELSE IF (@ind%29=0) SET @ind_ref=9;
ELSE IF (@ind%31=0) SET @ind_ref=10;
ELSE IF (@ind%37=0) SET @ind_ref=11;
ELSE SET @ind_ref=@ind%1190000;
INSERT INTO [dbo].[Customer]
([ID]
,[Name]
,[Ref_ID]
,[Ref_ID2])
SELECT
@ind,
CAST(@ind AS NVARCHAR(255)),
@ind_ref,
@ind_ref;

SET @ind=@ind+1;
END
GO
ابزار SQL Complete در مراقبت پوسته منظم کد اسکریپت ها به شما میتواند یاری دهد.

براین اساس ، ما دو جدول ساخت کردیم - یک کدام از آنان بیشتراز 1 میلیون ستون داراست و دیگری بیشتراز 10 میلیون ستون داراست.

اینک بایستی یک پروژه آزمایشی در Visual C# Console App ساخت و ساز کنیم:

در گام بعدی ، می بایست یک کتابخانه به Entity Framework اضافه کنیم تا بتوانیم با مقر داده در خصوص باشیم.

برای اضافه کردن این کتابخانه، روی پروژه کلیک راست نمائید و‘Manage NuGet Packages …’ را در منو تعیین نمائید،

 

در پنجره گشوده گردیده، \"Entity Framework\" را در فریم کاوش وارد فرمائید، بسته Entity Framework را گزینش نمائید و آن را نصب نمایید:

 

در گام بعد از آن، در فولدر App.config، کدهای تحت را آن‌گاه ازعنصر configSections اضافه می‌کنیم:

 


مطمئن گردید حرفه اتصال در connection string وارداتی باشد.

درحال حاضر سه Interface در فولدر های غیروابسته تولید می‌کنیم:

IBaseEntityID

namespace TestLINQ
{
public interface IBaseEntityID
{
int ID { get; set; }
}
}
IBaseEntityName

namespace TestLINQ
{
public interface IBaseEntityName
{
string Name { get; set; }
}
}
IBaseNameInsertUTCDate

namespace TestLINQ
{
public interface IBaseNameInsertUTCDate
{
DateTime InsertUTCDate { get; set; }
}
}
در یک پوشه جدا، یک کلاس BaseEntity برای دو موجودیت خویش ساخت و ساز می‌کنیم که دربرگیرنده فیلدهای مشترک آنان باشد.

namespace TestLINQ
{
public class BaseEntity : IBaseEntityID, IBaseEntityName, IBaseNameInsertUTCDate
{
public int ID { get; set; }
public string Name { get; set; }
public DateTime InsertUTCDate { get; set; }
}
}
در گام آن گاه دو موجودیت (Entitie) می‌سازیم هر مورد در پوشه جدا:

Ref

using System.ComponentModel.DataAnnotations.Schema;

namespace TestLINQ
{
[Table(\"Ref\")]
public class Ref : BaseEntity
{
public int ID2 { get; set; }
}
}
Customer

using System.ComponentModel.DataAnnotations.Schema;

namespace TestLINQ
{
[Table(\"Customer\")]
public class Customer: BaseEntity
{
public int Ref_ID { get; set; }
public int Ref_ID2 { get; set; }
}
}
در پایان یک UserContext در یک فولدر مستقل ساخت و ساز می‌کنیم،

using System.Data.Entity;

namespace TestLINQ
{
public class UserContext : DbContext
{
public UserContext()
: base(\"DbConnection\")
{
Database.SetInitializer(null);
}

public DbSet Customer { get; set; }
public DbSet Ref { get; set; }
}
}
بنابراین، ما یک راه‌حل برای اجرا آزمایش های سئو به یاری LINQ to SQL از روش Entity Framework برای MS SQL Server اخذ میکنیم:

 

اینک، کد ذیل را در Program.cs وارد می‌کنیم:

using System;
using System.Collections.Generic;
using System.Linq;

namespace TestLINQ
{
class Program
{
static void Main(string[] args)
{
using (UserContext db = new UserContext())
{
var dblog = new List();
db.Database.Log = dblog.Add;

var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
&& (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };

var result = query.Take(1000).ToList();

Console.WriteLine(dblog[1]);

Console.ReadKey();
}
}
}
}
زمانی پروژه را انجام کنیم، این خروجی میباشد که تحت عنوان سود در کنسول خوا هیم روءیت کرد،

SELECT TOP (1000)
[Extent1].[Ref_ID] AS [Ref_ID],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
INNER JOIN [dbo].[Ref] AS [Extent2] ON ([Extent1].[Ref_ID] = [Extent2].[ID]) AND ([Extent1].[Ref_ID2] = [Extent2].[ID2])
همان گونه که مشاهده می‌کنید، یک LINQ query به صورت کارآمد SQL query را در

MS SQL Server DBMS تولید نموده است.

حال، شرط AND را به OR در LINQ query تغییر تحول می‌دهیم

var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
|| (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };
مجدد اپلیکیشن را اعمال می‌کنیم

یک اشتباه فیس می دهد، از تفصیل غلط، متوجه می شویم که عملیات بعد از 30 ثانیه به نقطه نهایی رسیده میباشد،

 

این کوئریی میباشد که LINQ ساخت‌و‌ساز نموده است:

 

می‌بینیم که تعیین از یک حاصلضرب دکارتی از دو دسته (جدول) ایفا میگردد

SELECT TOP (1000)
[Extent1].[Ref_ID] AS [Ref_ID],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
CROSS JOIN [dbo].[Ref] AS [Extent2]
WHERE [Extent1].[Ref_ID] = [Extent2].[ID] OR [Extent1].[Ref_ID2] = [Extent2].[ID2]
LINQ query را مجدد به‌این شکل می نویسیم

var query = (from e1 in db.Customer
join e2 in db.Ref
on e1.Ref_ID equals e2.ID
select new { Data1 = e1.Name, Data2 = e2.Name }).Union(from e1 in db.Customer
join e2 in db.Ref
on e1.Ref_ID2 equals e2.ID2
se
این SQL query می باشد که تحت عنوان فیض اخذ میکنیم

SELECT
[Limit1].[C1] AS [C1],
[Limit1].[C2] AS [C2],
[Limit1].[C3] AS [C3]
FROM ( SELECT DISTINCT TOP (1000)
[UnionAll1].[C1] AS [C1],
[UnionAll1].[Name] AS [C2],
[UnionAll1].[Name1] AS [C3]
FROM (SELECT
1 AS [C1],
[Extent1].[Name] AS [Name],
[Extent2].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent1]
INNER JOIN [dbo].[Ref] AS [Extent2] ON [Extent1].[Ref_ID] = [Extent2].[ID]
UNION ALL
SELECT
1 AS [C1],
[Extent3].[Name] AS [Name],
[Extent4].[Name] AS [Name1]
FROM [dbo].[Customer] AS [Extent3]
INNER JOIN [dbo].[Ref] AS [Extent4] ON [Extent3].[Ref_ID2] = [Extent4].[ID2]) AS [UnionAll1]
) AS [Limit1]
متأسفانه ، تنها یک شرط اتصال در یک LINQ query وجود داراست، بدین ترتیب می‌توانیم با ساخت یک کوئری برای هر دو شرط و آن گاه مخلوط آنان با به کارگیری از Union برای حذف خطوط تکراری ، به نتیجه ها دلخواه برسیم.

آری، با دقت به اینکه مجموع ستون های تکراری را می‌توانید برگردانید کوئری ها در اکثر مفاد نابرابر خواهند بود. با این درحال حاضر ، در معاش حقیقی به ستون های تکراری نیازی وجود ندارد و معمولاً مواقعی می باشند که میخواهید از آنان خلاص گردید.

اکنون بیایید نرم افزار های اجرایی این دو کوئری را با هم مقایسه کنیم:

معدل مجال ایفا برای ,CROSS JOIN 195 ثانیه میباشد

 

معدل فرصت انجام برای INNER JOIN-UNION کمتر از 24 ثانیه میباشد

 

همانگونه که از حاصل مشاهده می‌کنیم، LINQ query با صرفه گردیده یک سری موازی سریعتر از یک گزینه با صرفه نشده در‌این دو جدول با میلیون ها رکورد، فعالیت می نماید.

برای نسخه با شرط AND، یک LINQ query این چنین خواهد بود،

var query = from e1 in db.Customer
from e2 in db.Ref
where (e1.Ref_ID == e2.ID)
&& (e1.Ref_ID2 == e2.ID2)
select new { Data1 = e1.Name, Data2 = e2.Name };
به طور تقریبً در‌این حالت ، یک SQL query درست ساخت‌و‌ساز می‌گردد ، با فرصت اجرای به طور تقریبً 24 ثانیه:

 

همینطور، برای عملیات LINQ to Objects، به مکان کوئری که این چنین میباشد:

var query = from e1 in seq1
from e2 in seq2
where (e1.Key1==e2.Key1)
&& (e1.Key2==e2.Key2)
select new { Data1 = e1.Data, Data2 = e2.Data };
میتوانیم از کوئری شبیه ذیل استعمال کنیم:

var query = from e1 in seq1
join e2 in seq2
on new { e1.Key1, e1.Key2 } equals new { e2.Key1, e2.Key2 }
select new { Data1 = e1.Data, Data2 = e2.Data };
جایی که

Para[] seq1 = new[] { new Para { Key1 = 1, Key2 = 2, Data = \"777\" }, new Para { Key1 = 2, Key2 = 3, Data = \"888\" }, new Para { Key1 = 3, Key2 = 4, Data = \"999\" } };
Para[] seq2 = new[] { new Para { Key1 = 1, Key2 = 2, Data = \"777\" }, new Para { Key1 = 2, Key2 = 3, Data = \"888\" }, new Para { Key1 = 3, Key2 = 5, Data = \"999\" } };
نوع Para به طرز ذیل تعریف و تمجید میشود:

class Para
{
public int Key1, Key2;
public string Data;
}
سود گیری

ما بعضی از شرایط های سئو LINQ query را برای MS SQL Server پژوهش کردیم. همینطور، SQL Complete در جستجوی تاریخچه کوئری و همینطور پوسته بندی اسکریپت هایی که درین نوشته‌ی‌علمی به کار گیری کردیم، به ما یاری متعددی کرد.

متأسفانه، حتی توسعه و گسترش دهندگان مجرب .NET نیز اکثر وقت ها فراموش می نمایند که ادراک راهبرد های مستعمل در دور‌نما ضروری میباشد. وگرنه، آن ها میتوانند تنظیمات گردیده و در آجل بمب ساعتی مجازی تهیه و تنظیم نمایند، چه وقتی که چاره مقیاس بندی گردیده باشد و چه وقتی که دست اندرکاران فرنگی پاره ای تغییر تحول نماید.

همینطور ، فایل Plans از این ریپازیتوری دربرگیرنده نرم‌افزار های اجرایی کوئری ها با شرط OR میباشد.

خلال این ، یک چاره بهتر به اسم dotConnect وجود داراست، که یک سطر از کامپوننت های data access از Devart برای DBMS های متنوع میباشد. از بین آن ها، مولفه های dotConnect از ابزارهای ORM مانند Entity Framework Core و LinqConnect هواخواهی می نمایند که به شما این قابلیت را میدهد با کلاس های LINQ to SQL فعالیت نمایید.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 60
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : پنج شنبه 29 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی


امروز می خواهیم به شما فراگیری بدهیم که طراحی اپلیکیشن چه گونه با API در نرم افزار اندروید خویش در تعامل باشید


خب در اولِ فعالیت ما یک متغیر از نوع لیست و یک

Request network نیاز داریم

private HashMap api_all = new HashMap<>();

private RequestNetwork api;

private RequestNetwork.RequestListener _api_request_listener;
خب در کد های بالا هردو آنان‌را تعریف و تمجید کردیم اکنون بایستی انتخاب کنیم که در حالتی که مشکلی وجود نداشت و درخواست با توفیق به API ابلاغ شد فیض JSON را در یک متغیر مپ که با اسم api_all تعریف و تمجید کردیم ذخیره نماید

private void initialize(Bundle _savedInstanceState) { api = new RequestNetwork(this); _api_request_listener = new RequestNetwork.RequestListener() { @Override public void onResponse(String _param1, String _param2) { final String _tag = _param1; final String _response = _param2;
api_all = new Gson().fromJson(_response, new TypeToken>(){}.getType()); }
در کد های بالا کل فیض json را ذخیره کردیم یعنی زمانی درخواست ابلاغ شد فیض در متغیر لیست ذخیره می شود .

درحال حاضر می بایست درخواست را به API ارسال کنیم

این کد را در برگه مهم قرار می‌دهیم تا همین که نرم افزار گشوده شد درخواست ارسال خواهد شد

private void initializeLogic() {

api.startRequestNetwork(RequestNetworkController.GET, \"https://api.com\", \"\", _api_request_listener);
}
در کد بالا درخواست را ارسال کردیم ، تا الان به طور بدون نقص توانستیم به API درخواست ارسال کنیم و سود را ذخیره کنیم

در حال حاضر حافظه می‌گیریم که چه‌طور داده ها را که در متغیر api_all قرار دادیم را حصول کنیم

 

(داده ها مانندِ : یک آرایه ، یک حرفه ، یک آبجکت .... )

private String query = \"\";
خب در کد بالا آغاز یک متغیر ساخت کردیم با اسم query که آبجکت متبوع رو درین متغیر دستیابی کنیم

query = api_all.get(\"person1\").toString();
در کد بالا متغیر query را موازی کردیم با یک آبجکت person1 این آبجکت از به عبارتی فیض json میباشد که در متغیر api_all ذخیره کرده ایم

 

کد بالا تنها یک نمونه بود شما می‌توانید هر آبجکتی که در فولدر JSON به دست آورده اید را به صورت بالا در هر کجا که می‌خواهید از متغیر مپ آیتم نظرتان که فیض را در آن ذخیره کردید به دست آورید

 

امیدوارم به دردتان خورده باشد

برنده و غالب باشید .



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 63
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : چهار شنبه 28 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

یادگرفتن پر‌نور و بی صدا کردن لامپ قوه در طراحی اپلیکیشن نرم افزار اندروید (او‌لین نوشته‌علمی پروژه شالوده وبسایت برنامه نویس ها)


خب در اولِ این نوشته‌علمی بگم که‌این نوشته‌ی‌علمی اولی نوشته‌علمی پروژه مبنا وب سایت برنامه نویس ها میباشد :)

 

بریم سراغ پروژه خب امروز می‌خوایم که یک نرم‌افزار لامپ قوه بنویسیم در اولِ عمل یک نرم افزار در IDE خویش ساخت و ساز می‌کنیم

 

در اولِ فعالیت یک دکمه تولید می کنیم که هنگامی روی آن کلیک شد لامپ قوه پر‌نور یا این که بی سر و صدا بشود که اینجانب از گذشته فراهم کردم و کد های XML این برگه رو در اختیارتون قرار میدم

xmlns:android=\"http://schemas.android.com/apk/res/android\"
xmlns:app=\"http://schemas.android.com/apk/res-auto\"
xmlns:tools=\"http://schemas.android.com/tools\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:orientation=\"vertical\">
android:id=\"@+id/linear1\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:padding=\"8dp\"
android:background=\"#000000\"
android:gravity=\"center_horizontal|center_vertical\"
android:orientation=\"vertical\"
android:layout_gravity=\"center_horizontal|center_vertical\">
android:id=\"@+id/button1\"
android:layout_width=\"match_parent\"
android:layout_height=\"85dp\"
android:padding=\"8dp\"
android:text=\"پر‌نور\"
android:textSize=\"30sp\"
android:textColor=\"#FFFFFF\"/>
android:id=\"@+id/textview1\"
android:layout_width=\"wrap_content\"
android:layout_height=\"wrap_content\"
android:padding=\"8dp\"
android:text=\"برنامه نویس ها barnamenevisan.org\"
android:textSize=\"12sp\"
android:textColor=\"#FFFFFF\"/>


هم اکنون ما یک دکمه داریم که می توانیم با onclick شدن آن لامپ قوه را پر‌نور و خموشی کنیم

این از کد های XML حال بریم سراغ کد های جاوا در صدر یک متغیر Boolean تمجید می‌کنیم یادتان باشد که به طور پیشفرض آن را False قرار بدیم

private boolean on_and_off = false;
اینم از این اکنون دو تابع بنویسیم که هروقت صدا شدن تابع اولیه لامپ قوه را پر‌نور و تابع دوم لامپ قوه را بی سروصدا نماید

 

تابع تمجید گردیده برای پر‌نور شدن لامپ قوه

public void _flashLightOn () {
android.سخت افزار.camera2.CameraManager cameraManager = (android.سخت افزار.camera2.CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String cameraId = cameraManager.getCameraIdList()[0]; cameraManager.setTorchMode(cameraId, true); } catch (android.سخت افزار.camera2.CameraAccessException e) { }
}
تابع تعریف و تمجید گردیده برای خموشی شدن لامپ قوه

public void _flashLightOff () {
android.سخت افزار.camera2.CameraManager cameraManager = (android.سخت افزار.camera2.CameraManager) getSystemService(Context.CAMERA_SERVICE);
try {
String cameraId = cameraManager.getCameraIdList()[0]; cameraManager.setTorchMode(cameraId, false); } catch (android.سخت افزار.camera2.CameraAccessException e) { }
}

درحال حاضر بریم سراغ اصل مقاله :)

یعنی وقتی که دکمه ای که در بالا تعریف و تمجید کردیم onclick بشه

private void initialize(Bundle _savedInstanceState) {

linear1 = (LinearLayout) findViewById(R.id.linear1);
button1 = (Button) findViewById(R.id.button1);
textview1 = (TextView) findViewById(R.id.textview1);

button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View _view) {
if (on_and_off) {
_flashLightOff();
button1.setText(\"پر‌نور \");
int[] colorsCRNRK = { Color.parseColor(\"#006aff\"), Color.parseColor(\"#00ffe4\") }; android.graphics.drawable.GradientDrawable CRNRK = new android.graphics.drawable.GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation.BR_TL, colorsCRNRK);
CRNRK.setCornerRadii(new float[]{(int)64,(int)64,(int)64,(int)64,(int)64,(int)64,(int)64,(int)64});
CRNRK.setStroke((int) 0, Color.parseColor(\"#000000\"));
button1.setElevation((float) 12);
button1.setBackground(CRNRK);

on_and_off = false;
}
else {
_flashLightOn();
button1.setText(\"بی سر و صدا\");
int[] colorsCRNIK = { Color.parseColor(\"#ff2800\"), Color.parseColor(\"#ff00f9\") }; android.graphics.drawable.GradientDrawable CRNIK = new android.graphics.drawable.GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation.BR_TL, colorsCRNIK);
CRNIK.setCornerRadii(new float[]{(int)64,(int)64,(int)64,(int)64,(int)64,(int)64,(int)64,(int)64});
CRNIK.setStroke((int) 0, Color.parseColor(\"#000000\"));
button1.setElevation((float) 12);
button1.setBackground(CRNIK);

on_and_off = true;
}
}
});
}

خب اینم از این حال یکم بهتون در ارتباط با کد بالا توضیح بدم

هنگامی که کلیک میشه روی دکمه کد های بالای ما جاری ساختن میشن

یادتونه متغیرمون رو False کرده بودیم؟ درین شرطی که در کد های بالا وجود داره میگه که هنگامی True خلا لامپ قوه رو پر‌نور کن و متغیر رو True کن

هم اکنون مخاطب برای توشه دوم کلیک که می‌کنه متغیر ما که True گردیده پس شرط مهم جاری ساختن میشه یعنی لامپ قوه سکوت میشه و مجدد متغیر False میشه

و به همین متد اگه مخاطب مجدد کلیک که کرد لامپ قوه پر‌نور میشه

 

خب تموم شد :)

 

تک تک سورس پروژه رو در یک فولدر ZIP براتون ضمیمه می کنم و میتونید به راحتی به سورس بی نقص دسترسی داشته باشید ⁦;)⁩

همینطور در‌این پوشه ، فولدر APK رو هم براتون قرار میدم که کامپایل گردیده همین سورسه

اینجا یه نکته هم بگم :

انقدم اینجانب بی ذوق نیستما بخاطر اینکه سریع کارو تموم کنیم یه مقدار زشت شد وگرنه اعتقادوباور فرمائید بیشتر از اینا ابتکار دارم :)

درضمن خودمونی حرف کردنم توی نوشته ی علمی هم فقط جهت این بود که ریلکس خیس تعامل نمائید امیدوارم سبب ساز دلخوری نشده باشه

 

امیدوارم به دردتان خورده باشد

غالب و غالب باشید .



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 61
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : سه شنبه 27 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

امروز ما حافظه می‌گیریم که چه گونه یک کامپوننت سفارشی طراحی اپلیکیشن برای Pagination در Angular ساخت‌و‌ساز کنیم و همینطور، به چه شکل ازیک کامپوننت در کامپوننت دیگر تحت عنوان یک child component به کارگیری کنیم.


پیش نیازها

علم اول از کامپوننت ها و ماژول های Angular و TypeScript

در اینجا، ما یک کامپوننت سفارشی برای pagination ساخت می‌کنیم و به شما آرم خوا هیم اعطا کرد که چه طور از آن استعمال فرمایید. گذشته ازآن، شما می بایست علم اول در زمینه‌ی انگولار را داشته باشید.

ما فرض میکنیم که شما تا قبل از اینً یک نرم‌افزار انگولار ساخته اید. در اینجا، ما شیوه ساخت‌و‌ساز یک component در اپ درست شده یتان را نشانه خوا‌هیم بخشید.

دقت

ما از bootstrap 4 برای پباده سازی کامپوننت pagination استعمال می‌کنیم، به این ترتیب، شما بایستی بسته bootstrap را نیز در اپ یتان نصب فرمائید.

گام اولیه

فولدر ای به اسم app-pagination در فولدر component اپلیکیشن خویش ساخت و ساز فرمائید. همگی کامپوننت ها و ماژول ها را صرفا در‌این فولدر ساخت‌و‌ساز خوا هیم کرد.

گام دوم

فعلا، ما کامپوننتی برای pagination ساخت‌و‌ساز میکنیم. با اجرای فرمان پایین در دایرکتوری app-pagination که در مرحله نخستین ساخت و ساز کردیم، می‌توانید کامپوننت را تولید فرمایید.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 56
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : دو شنبه 26 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

در اپ‌های دنیای حقیقی وواقعی، سازوکار لاگ کردن مطلوب نادرست طراحی اپلیکیشن برای ردیابی و انواع‌زدایی رفتارهای غیرمنتظره نرم‌افزار ضروری میباشد. در Asp.Net Core ما یک Logging API داخلی داریم که در Microsoft.Extensions.Logging قرار گرفته میباشد که تحت عنوان یک پکیج NuGet ارائه میشود.


با این API، ما می توانیم داده ها را با providerهای داخلی لاگ کردن مانند Console، Debug، EventListener، TraceListeners و غیره لاگ کنیم. برای توسعه و گسترش تعداد providerها مایکروسافت با providerهای لاگ گوناگون فرد ثالث مانند NLog، Serilog، Loggr، Log4Net و برخی مفاد دیگر همیاری نموده است.

درین نوشته‌علمی، ترکیب Asp.Net Core با NLog، یکی‌از دوستداشتنی‌ترین providerهای لاگ فرد ثالث را نظارت خوا هیم کرد.

پروسه ترکیب

در‌این نوشته‌ی‌علمی، مخلوط NLog با اپلیکیشن اینترنت Asp.Net Core را پوشش خوا هیم بخشید. در‌این مراحل سه فعالیت وجود داراست که بایستی ایفا دهیم:

1. اضافه کردن NLog NuGet Package

2. اضافه کردن NLog Configuration

3. اضافه کردن NLog Provider

اضافه کردن NLog NuGet Package

در اولی گام بایستی NLog را از NuGet package manager نصب کنیم.

برای ایفا این فعالیت، از سولوشن بر روی پروژه کلیک راست کرده و از منو Manage NuGet Packages را گزینش میکنیم. پنجره Package Manager Solution گشوده می‌گردد.

از پنجره Package Manager، پکیج NLog.Web.AspNetCore NuGet را کاوش می کنیم، همان طور که در تصویر تحت آرم داده گردیده‌است.


آن گاه، واپسین ورژن را تعیین کرده و بر روی Install کلیک می کنیم. در شکل نیاز به ورژن گذشته، قادر خواهیم بود از لیست کشویی مرتبط با ورژن آن را گزینش کنیم.


با اعمال این عمل NLog NuGet package برای پروژه ما نصب می‌گردد. بعداز اخذ پیام توفیق، قادر خواهیم بود به مرحله آتی برویم، یعنی اضافه کردن کانفیگ NLog.

اضافه کردن NLog Configuration

بعداز نصب پکیج NuGet ی NLog می بایست آن را کانفیگ کنیم. داده ها کانفیگ برای NLog در درون یک فولدر configuration، به اسم nlog.config در پوشه روت اپلیکیشن مراقبت میشود.

این nlog.config به طور اتوماتیک ساخت نمی شود. بدین ترتیب بایستی آن را به طور دستی اضافه کنیم.

برای اضافه کردن nlog.config، بر روی پروژه راست کلیک کرده و Add و بعد از آن New Item را از منو گزینش می کنیم. از پنجره Text file ,new item template را کاوش می کنیم.


همان گونه که در تصویر ذیل آرم داده شد‌ه‌است، پوشه متنی را nlog.config نامگذاری نمائید.


پوشه کانفیگ NLog یک فولدر تنظیمات مبتنی بر XML میباشد. در ذیل دست‌کم کانفیگ لازم برای تایپ کردن داده ها لاگ در پوشه جان دار میباشد.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 64
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : یک شنبه 25 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

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

برای مثال متداول‌ترین نحوه‌های درآمدزایی مکرر، شرکت کردن در همیاری با یک کمپانی به طور فریلنسر/قراردادی میباشد. ممکن میباشد این یک فریلنسر دیگر باشد که نیاز به یاری فرد دیگری داراست، یا این که یک آژانسی باشد که به فردی با تخصص شما نیاز دارااست.

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

آنگاه قابلیت فروش یک فرآورده یا این که خدمت با پاره ای درآمد مستمر وجود داراست. رکود اقتصادی می تواند زمان قابل قبولی برای تشکیل داد پایانی آن نرم افزار یا این که پلاگینی باشد که به آن اندیشه کرده‌اید، یا این که تایپ کردن کتاب الکترونیکی که در ذهنیت شما جولان می دهد.

علاوه‌براین، می توانید این پروژه‌ها را به روشی متناسب با نیازهای خویش ایفا دهید. برای مثال میتوانید آپدیت رسانی منظم آن نرم‌افزار را اعمال دهید یا این که با تغییر و تحول تکنولوژی آن را تروتمیز فرمائید، یا این که ممکن میباشد به آسانی یک درآمد منفعل از عمل طاقت فرسا خویش را تولید فرمائید.

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



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 65
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : شنبه 24 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

گویش اپ‌نویسی Go در سال‌های اخیر محبوبیت متعددی به دست آورده طراحی اپلیکیشن میباشد. این لهجه به صورت مداوم بقیه لهجه‌های backend مثل Ruby، Python، Java و C# را جا به جا می‌نماید. Go به جهت آسانی، صراحت، سرعت و مصرف معدود یاد خواستار متعددی دارااست.


اکثری از گسترش‌دهندگان که جدید‌عمل می باشند، یا این که در زبانی که میتواند خاطر را به صورت بدون واسطه با به کارگیری از اشاره‌گرها یا این که به عبارتی پوینترها رئیس نماید جدید‌شغل میباشند، در غایت از این اشاره‌گرها به صورت بدی استعمال می‌نمایند.

پوینتر چیست؟

پوینتر متغیری میباشد که نشانی مقدار را به مکان خویش مقدار ذخیره می‌نماید. در حالتی که خاطر کامپیوتر (RAM) را تحت عنوان شیء JSON در حیث بگیرید، یک پوینتر مانند کلید میباشد، و یک متغیر بی آلایش مقدار آن میباشد.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 66
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : پنج شنبه 22 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

به علاوه، با pytest، می توانید در کلیه پروژه‌های پایتون مدل ثابتی طراحی اپلیکیشن داشته باشید. شما دو اپ اینترنت در stack خویش دارید؛ یکی از با Django ایجاد شده است و دیگری با Flask تاسیس شده است. سوای pytest، شما به احتمال زیاد از کادر‌ورک آزمایش Django، به یاور اکستنشن Flask، مانند Flask-Testing به کارگیری می کنید. براین اساس گروه‌های آزمایش شما مدل‌های مختلفی دارا هستند. از طرف دیگر، با pytest، دسته‌های آزمایش شما مدل کد ثابتی دارا‌هستند و پریدن از یکی‌از به دیگری را راحت می‌سازد.

Pytest همینطور دارنده یک اکوسیستم افزونه تبارک و با نگهداری جامعه میباشد.

یک سری مثال:

pytest-django. گروه‌ای از ابزارها را که به صورت خاص برای آزمایش نرم افزار‌های Django تشکیل شده‌اند، آماده می‌نماید.

pytest-xdist. برای اجرای آزمایش‌ها به طور برابر به کارگیری می گردد.

pytest-cov. مدد از پوشش کد (code coverage) را اضافه می‌نماید.

pytest-instafail. به جای این که تا نقطه پایان ایفا چشم به راه بماند، فورا ایرادات و باخت‌ها را نشانه می دهد.

Mocking

آزمایش‌های خود کار بایستی سریع، جدا، قابل تکرار/قطعی باشند. به این ترتیب در شرایطی‌که به آزمایش کدی نیاز دارید که HTTP request فرنگی را برای API فرد ثالث می‌سازد، می بایست درخواست را mock نمائید. چرا؟ در‌حالتی که این شغل را نکنید، پس آن آزمایش خاص:

1. از آنجایی که HTTP request در کانال ساخته میشود، نماید میباشد.

2. به خدمت فرد ثالث و سرعت خویش کانال بستگی دارااست.

3. از آنجایی که آزمایش میتواند فیض متفاوتی را مبتنی بر جواب از API ساخت و ساز نماید، غیرقطعی میباشد.

همینطور ایده خیر میباشد که بقیه عملیات زمان بر ایفا را mock فرمایید، مانند کوئری‌های دیتابیس و taskهای async، چون آزمایش‌های خود کار به صورت مکرر، و در هر کامیت push که به سورس در اختیار گرفتن داده می شود، انجام میگردند.

Mocking تمرین جایگزینی آبجکت‌های حقیقی وواقعی با آبجکت‌های mock گردیده است، که در طول انجام خلق و خوی آنها را پیروی می‌نماید. بدین ترتیب به مکان HTTP request حقیقی از روش کانال، زمانی اسلوب mocked فراخوانی میگردد ما تنها جواب آیتم انتظار را برمی‌گردانیم.



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 68
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : چهار شنبه 21 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

جهش عظیمی در جستجوی صوتی صورت خواهد اعطا کرد، که تا قبل از این طراحی اپلیکیشن شروع گردیده‌است! جستجوی صوتی زنده‌خیس می شود، و رویش به کار گیری از Siri، Cortana، Google Assistant، Alexa و Echo گواه این قضیه میباشد. براین اساس، مخاطبان با سخن کردن با صدای بلند شل‌خیس می شوند تا اینکه بخواهند آن را تایپ نمایند!

تکنولوژی Blockchain

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

بلاک‌چین با کانال همتا به همتا (peer-to-peer) مدیر گردیده‌است که دارنده یک پروتکل مشقت بار‌گیرانه برای فرایند احراز نام و نشان بلوک تازه و رابطه در گره‌ها (node) میباشد. به همین عامل بلاک‌چین تیتر \"اولی و قابل اعتمادترین کمپانی کدگذاری‌گردیده\" را به خویش تخصیص داده میباشد.

گردآوری‌بندی

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



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 67
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : سه شنبه 20 ارديبهشت 1401 | نظرات ()
نوشته شده توسط : عباسی

این الگوی زیر الگوی رفتاری قرار میگیرد. اهدافی که طراحی اپلیکیشن الگوی Chain of Responsibility آن‌ها‌را دنبال می نماید عبارتند از: 1. اجرا شغل در چندین مرحله 2 . حذف عدم وضوح های پیاده سازی در مواقعی که با if و else های تو در تو روبرو می شویم خواهیم توانست از این سرمشق به کار گیری کنیم. در‌این نوشته‌علمی نمونه جابجایی پول را نظارت خوا هیم کرد.


ما چندین دیتا داریم که تحت عنوان ورودی اخذ میکنیم که در واقع دیتای context ما میباشد و آنان را در یک کلاس قرار می‌دهیم. و یک کلاس داریم که یک اسلوب processor داراست و یک property از محصول خودش دارااست که به نفر آتی اشاره می نماید که successor ما میباشد. هم اکنون به مکان به کار گیری از if، به ازای هر if یک کلاس صحیح میکنیم.

درین نمونه اینجانب یک کلاس Customer را در حیث می‌گیرم که موجودی اکانت، موقعیت فعال بودن، واحد سنجش برداشت روزمره و پسورد را مشمول میگردد.

public class Customer
{
public int AccountValue { get; set; }
public bool IsActive { get; set; }
public int MaxDateValue { get; set; }
public string Password { get; set; }
}
کلام از یک context data کردیم که دیتای ورودی من‌را تشکیل می‌دهد.

با فرض اینکه مشتری را از دیتابیس خوانده ایم و می‌دانیم که می باشد، پسورد و پولی که قصد جابجایی دارااست و همینطور مشتری جابجایی دهنده و گیرنده را در ورودی اخذ می‌کنیم.

public class RequestContext
{
public string Password { get; set; }
public int Value { get; set; }
public Customer FromCustomer { get; set; }
public Customer ToCustomer { get; set; }
}
می بایست روالی تولید کنیم که بتوانیم دیتای ورودی را اخذ کنیم، آغاز به proccess کنیم و سود خروجی را بدهیم.

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



:: برچسب‌ها: طراحی اپلیکیشن ,
:: بازدید از این مطلب : 32
|
امتیاز مطلب : 0
|
تعداد امتیازدهندگان : 0
|
مجموع امتیاز : 0
تاریخ انتشار : دو شنبه 19 ارديبهشت 1401 | نظرات ()