سال نو مبارک
نوروز مبارک!
سال نو مبارک
سلام
نمیدونم عبارات و اصطلاحاتی که بکار میبرم درسته یا خیر.
آیا برای تهیه دفتر مشخصات فنی یک پروژه نرم افزاری الگو و ساختار استانداردی وجود دارد؟ در واقع قصد دارم تمامی جزئیات ساختاری پروژه را مستند کنم تا بشه بر مبنای اون دفترچه، برنامه را از حیث پیاده سازی تجزیه تحلیل کرد.
تشکر
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public class IPBlockModule : IHttpModule { public IPBlockModule() { // TODO: Add constructor logic here } public void Dispose() { //Dispose } public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(Application_BeginRequest); } private void Application_BeginRequest(object source, EventArgs e) { HttpContext context = ((HttpApplication)source).Context; string ipAddress = context.Request.UserHostAddress; if (IsBlockedIpAddress(ipAddress)) { context.Response.StatusCode = 403; context.Response.Write("Forbidden : The server understood the request, but It is refusing to fulfill it."); } } private bool IsBlockedIpAddress(string ipAddress) { //Here I have stored Ip addresses in String[]. you can also Store in database. string[] IPs = { "117.196.35.121", "117.196.35.122", "117.196.35.123", "117.196.35.124", "127.0.0.1" }; foreach(string IP in IPs) { if(IP == ipAddress) return true; } return false; } }
<configuration> <system.web> <compilation debug="true" targetFramework="4.0"/> <httpModules> <add name="IPBlockModule" type="IPBlockModule"/> </httpModules> </system.web> </configuration>
[PartCreationPolicy(CreationPolicy.Shared)]
using System;
using System.ComponentModel.Composition;
namespace SlMefTest
{
[Export]
public class WebServiceData
{
public int Result { set; get; }
public WebServiceData()
{
var rnd = new Random();
Result = rnd.Next();
}
}
}
<UserControl x:Class="SlMefTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400">
<StackPanel>
<Button Content="MainPageButton" Height="23"
HorizontalAlignment="Left"
Margin="10,10,0,0" Name="button1"
VerticalAlignment="Top" Width="98" Click="button1_Click" />
<StackPanel Name="panel1" Margin="5"/>
</StackPanel>
</UserControl>
using System.ComponentModel.Composition;
using System.Windows;
namespace SlMefTest
{
public partial class MainPage
{
[Import]
public WebServiceData Data { set; get; }
public MainPage()
{
InitializeComponent();
this.Loaded += mainPageLoaded;
}
void mainPageLoaded(object sender, RoutedEventArgs e)
{
CompositionInitializer.SatisfyImports(this);
panel1.Children.Add(new SilverlightControl1());
}
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Data.Result.ToString());
}
}
}
<UserControl x:Class="SlMefTest.SilverlightControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<Button Content="UserControlButton"
Height="23"
HorizontalAlignment="Left"
Margin="10,10,0,0"
Name="button1"
VerticalAlignment="Top"
Width="125"
Click="button1_Click" />
</Grid>
</UserControl>
using System.ComponentModel.Composition;
using System.Windows;
namespace SlMefTest
{
public partial class SilverlightControl1
{
[Import]
public WebServiceData Data { set; get; }
public SilverlightControl1()
{
InitializeComponent();
this.Loaded += silverlightControl1Loaded;
}
void silverlightControl1Loaded(object sender, RoutedEventArgs e)
{
CompositionInitializer.SatisfyImports(this);
}
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Data.Result.ToString());
}
}
}
namespace FsWeb.Repositories open System.Data.Entity open FsWeb.Models type FsMvcAppEntities() = inherit DbContext("FsMvcAppExample") do Database.SetInitializer(new CreateDatabaseIfNotExists<FsMvcAppEntities>()) [<DefaultValue()>] val mutable books: IDbSet<Guitar> member x.Books with get() = x.books and set v = x.books <- v
namespace FsWeb.Repositories type BooksRepository() = member x.GetAll () = use context = new FsMvcAppEntities() query { for g in context.Books do select g } |> Seq.toList
FSPowerPack.Linq.Community
query <@ seq { for g in context.Books -> g } @> |> Seq.toList
[<HandleError>] type BooksController(repository : BooksRepository) = inherit Controller() new() = new BooksController(BooksRepository()) member this.Index () = repository.GetAll() |> this.View
<add name="FsMvcAppExample" connectionString="YOUR CONNECTION STRING" providerName="System.Data.SqlClient" />
نکته مهم: بدیهی است که تغییرات زیر، ORM شما را تنها به sql server مقید میکند که بعدها در صورت تغییر دیتابیس نیاز به حذف موارد زیر را خواهید داشت؛ در غیر اینصورت به مشکل عدم ایجاد دیتابیس برخواهید خورد.
public DateTime BirthDate { get; set; } public DateTime HireDate { get; set; } public DateTime? LeaveDate { get; set; }
SmallDateTime | 4 بایت |
DateTime | 8 بایت |
DateTime2 | 6 تا 8 بایت |
DateTimeOffset | 8 تا 10 بایت |
Date | 3 بایت |
Time | 3 تا 5 بایت |
از این جدول چه میفهمید؟ با یک نگاه میتوان فهمید که ساختار بالای من باید 24 بایت گرفته باشد؛ برای ساختاری که هم تاریخ و هم زمان (ساعت) را پشتیبانی میکند. ولی با نگاه دقیقتر به نام پراپرتیها این نکته روشن میشود که ما یک گپ Gap (فضای بیهوده) داریم چون زمان تولد، استخدام و ترک سازمان اصلا نیازی به ساعت ندارند و همان تاریخ کافی است. یعنی نوع Date با حجم کلی 9 بایت؛ که در نتیجه 15 بایت صرفه جویی در یک رکورد صورت خواهد گرفت.
پس کد بالا را به شکل زیر تغییر میدهم:
[Column(TypeName = "date")] public DateTime BirthDate { get; set; } [Column(TypeName = "date")] public DateTime HireDate { get; set; } [Column(TypeName = "date")] public DateTime? LeaveDate { get; set; }
خصوصیت Column از نسخه 4.5دات نت فریم ورک اضافه شده و در فضای نام System.ComponentModel.DataAnnotations.Schema قرار گرفته است.نوعهایی که در بالا با سایز متغیر هستند، به نسبت دقتی که برای آن تعیین میکنید، سایز میگیرند. مثل (time(0 که 3 بایت از حافظه را میگیرد. در صورتی که time معرفی کنید، به جای اینکه از شیء DateTime استفاده کنید، از شی Timespan استفاده کنید، تا در پشت صحنه از نوع داده time استفاده کند. در این حالت حداکثر حافظه یعنی 5 بایت را برخواهد داشت و بهترین حالت ممکن این هست که نیاز خود را بسنجید و خودتان دقت آن را مشخص کنید. دو شکل زیر نحوهی تعریف نوع زمان را مشخص میکنند. یکی حالت پیش فرض و دیگری انتخاب دقت:
public class Testtypes { public TimeSpan CloseTime { get; set; } public TimeSpan CloseTime2 { get; set; } } public class TestConfig : EntityTypeConfiguration<Testtypes> { public TestConfig() { this.Property(x => x.CloseTime2).HasPrecision(3); } }
float flExample=23.2f;
//real public float FloatData { get; set; } //real public Single SingleData { get; set; } //float public double DoubleData { get; set; }
4235.254
decimal d1=4545.112m;
modelBuilder.Entity<Class>().Property(object => object.property).HasPrecision(7, 3);
public class Testtypes { public Decimal Decimal1 { get; set; } public Decimal Decimal2 { get; set; } } public class TestConfig : EntityTypeConfiguration<Testtypes> { public TestConfig() { this.Property(x => x.Decimal2).HasPrecision(7, 3); } }
[StringLength(25)] public string FirstName { get; set; } [StringLength(30)] [Column(TypeName = "varchar")] public string EnProductTitle { get; set; } public string ArticleContent { get; set; } [Column(TypeName = "varchar(max)")] public string ArticleContentEn { get; set; }
this.Property(e => e.EnProductTitle).HasColumnType("VARCHAR").HasMaxLength(30);
modelBuilder.Properties<string>().Configure(c => c.HasColumnType("varchar")); //=========== یا modelBuilder.Properties<string>().Configure(c => c.IsUnicode(false));
//tinyInt public byte Age { get; set; } //smallInt public Int16 OldInt { get; set; } //int public int Int32 { get; set; } //Bigint public Int64 HighNumbers { get; set; }
در ادامه به بررسی و پیاده سازی مثال برای هر سه حلقه میپردازیم
#1 حلقه for سادهlet list1 = [ 1; 5; 100; 450; 788 ] for i in list1 do printfn "%d" i
1 5 100 450 788
for i in 1 .. 2 .. 10 do printf "%d " i
1 3 5 7 9
for c in 'a' .. 'z' do printf "%c " c
a b c d e f g h i j k l m n o p q r s t u v w x y z
for i in 10 .. -1 .. 1 do printf "%d " i
10 9 8 7 6 5 4 3 2 1
let beginning x y = x - 2*y let ending x y = x + 2*y for i in (beginning x y) .. (ending x y) do printf "%d " i
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
for i = 1 to 10 do printf "%d " i
1 2 3 4 5 6 7 8 9 10
for i = 10 downto 1 do printf "%d " i
10 9 8 7 6 5 4 3 2 1
for i = (beginning x y) to (ending x y) do printf "%d " i
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
while test-expression do body-expression
open System let main() = let password = "monkey"//شناسه برای مقدار رمز عبور let mutable guess = String.Empty// شناسه برای حدس رمز عبور let mutable attempts = 0//تعداد دفعات تست while password <> guess && attempts < 3 do// تا زمانی که رمز عبور با حدس آن برابر نیست و تعداد دفعات تکرار کمتر از سه است Console.Write("What's the password? ")//چاپ پیغام در خروجی attempts <- attempts + 1//مقدار دفعات یکی افزایش مییابد guess <- Console.ReadLine()// حدس رمز عبور از ورودی دریافت میشود if password = guess then// اگر رمز عبور با حدس آن یکی بود Console.WriteLine("You got the password right!")// پیغام موفقیت else Console.WriteLine("You didn't guess the password")//پیغام عدم موفقیت Console.ReadKey(true) |> ignore//منتظر ورودی برای خروج از برنامه