YAGNI (Buna ihtiyacın olmayacak)
Eğer bir API yazmıyorsanız ileride şuna da ihtiyacım olur diyerek hayali kodlar üretmeyin. Bu kodlar test süreçlerini de düşünürsek size tahmininizden fazla zaman kaybettirecektir. Ayrıca programınız olması gerekenden daha karmaşık hale gelecektir. Bundan dolayı gerçekten ihtiyacınız olana dek programınıza yeni özellikler eklemeyin.
DRY (Kendizi tekrar etmeyin)
Eğer aynı kodu ikiden fazla yerde tekrarlıyorsanız durup bir düşünün. Mümkünse tekrar eden kodları içeren fonksiyonlar/metotlar oluşturun ve başkalarının da kolayca kullanabilmesi için bu fonksiyonları/metotları uygun şekilde belgelendirin.
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.js"></script>
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<script type="text/javascript" src="https://www.cloudformatter.com/Resources/Pages/CSS2Pdf/Script/xepOnline.jqPlugin.js"></script>
<style type="text/css"></style>
<title>@cloudformatter template</title>
</head>
<body>
<div id="buttons">
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'download'})">PDF</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'download', mimeType:'application/postscript'})">Postscript</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'download', mimeType:'application/vnd.ms-xpsdocument'})">XPS</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'embed', mimeType:'image/svg+xml'})">SVG</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'embed', mimeType:'image/png'})">PNG @120dpi</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'embed', mimeType:'image/jpg', resolution:'60'})">JPG @60dpi</button>
<button onclick="return xepOnline.Formatter.Format('JSFiddle', {render:'embed', mimeType:'image/gif', resolution:'30'})">GIF @30dpi</button>
</div>
<hr>
<div id="JSFiddle">
<!-- Insert your document here -->
<header style="display:none;margin-top:20px;"><p>Add your header</p></header>
<footer style="display:none"><p>Add your header</p></footer>
<h1>Create a Document Here</h1>
</div>
</body>
</html>
http://www.cloudformatter.com/
sealed keywordü bir class ve metod modifier(niteleyici)dır. Eğer bir class sealed komutuyla işaretlenmişse o classtan kalıtım yapılamaz. Yani o class başka bir sınıfın base classı olamaz. Ayriyetten bir metod sealed komutuyla işaretleniyorsa o metodtan türetilen sınıfların ilgili metodu override etmeleri önlenir.
Kaynak: http://www.gencayyildiz.com/blog/cta-sealed-keywordu/
Filter
|
Interface
|
Default Implementation
|
|
Authorization Filter
|
IAuthorizationFilter
|
AuthorizeAttribute
|
Action Filter
|
IActionFilter
|
ActionFilterAttribute
|
Result Filter
|
IResultFilter
|
ActionFilterAttribute
|
Exception Filter
|
IExceptionFilter
|
HandleErrorAttribute
|
Authorization : Diğer filtreler ve Action metodlardan önce çalışmaktadır.Controller ya da Controller içindeki Action metoda erişim kısıtlamak için kullanılır.
Exception : Hata durumlarında çalışan filtredir.
Action : Herhangi bir Controller sınıfında bulunan Action metottan önce ya da sonra çalışır.
Result : Action Result çalıştırılmadan önce ya da çalıştırıldıktan sonra çalışır.
Assembly assembly = Assembly.GetExecutingAssembly();
IEnumerable<Type> types = assembly.GetTypes()
.Where(
type =>
typeof(Controller).IsAssignableFrom(type) &&
type.Name.Replace("Controller", "") == controllerName)
.OrderBy(x => x.Name);
foreach (Type cls in types)
{
HelpAttribute helpAttribute = Attribute.GetCustomAttribute(cls, typeof(HelpAttribute)) as HelpAttribute;
url = helpAttribute != null ? helpAttribute.Url : string.Empty;
........
}
Assembly assembly = Assembly.LoadFrom(sAssemblyFileName)
IEnumerable<Type> types = assembly.GetTypes().Where(type => typeof(Controller).IsAssignableFrom(type)).OrderBy(x => x.Name);
foreach (Type cls in types)
{
list.Add(cls.Name.Replace("Controller", ""));
IEnumerable<MemberInfo> memberInfo = cls.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()).OrderBy(x => x.Name);
foreach (MemberInfo method in memberInfo)
{
if (method.ReflectedType.IsPublic && !method.IsDefined(typeof(NonActionAttribute)))
{
list.Add("\t" + method.Name.ToString());
}
}
}
Assembly asm = Assembly.GetAssembly(typeof(MyWebDll.MvcApplication));
var controlleractionlist = asm.GetTypes()
.Where(type=> typeof(System.Web.Mvc.Controller).IsAssignableFrom(type))
.SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
.Where(m => !m.GetCustomAttributes(typeof( System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
.Select(x => new {Controller = x.DeclaringType.Name, Action = x.Name, ReturnType = x.ReturnType.Name, Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute",""))) })
.OrderBy(x=>x.Controller).ThenBy(x => x.Action).ToList();
public static class TypeExtensions
{
public static void MapTo<T, S>(this S source, T target)
{
Type sourceType = source.GetType();
Type targetType = target.GetType();
var sourceProperties = sourceType.GetProperties();
var targetProperties = targetType.GetProperties();
for (int i = 0; i < sourceProperties.Length; i++)
{
var currentProperty = sourceProperties[i];
var targetProperty = targetProperties
.FirstOrDefault(p => p.Name == currentProperty.Name);
if (targetProperty != null)
targetProperty.SetValue(target, currentProperty.GetValue(source, null), null);
}
}
}
<script src="FileSaver.js"></script>
var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");
Detaylı bilgi ve örneklere https://github.com/eligrey/FileSaver.js sayfasından ulaşabilirsiniz.
function base64encode(input) {
var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0;
input = utf8Encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
keyStr.charAt(enc1) + keyStr.charAt(enc2) +
keyStr.charAt(enc3) + keyStr.charAt(enc4);
}
return output;
}
function utf8Encode(string) {
string = string.replace(/\x0d\x0a/g, "\x0a");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if (c < 128) {
utftext += String.fromCharCode(c);
}
else if ((c > 127) && (c < 2048)) {
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}
else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
}
Ekrandaki verilerin “screenshots” almak için kullanılır.
http://html2canvas.hertzen.com/
Installation
To save the generated export files on client side, include:
<script type="text/javascript" src="libs/FileSaver/FileSaver.min.js"></script>
To export the table as a PDF file the following includes are required:
<script type="text/javascript" src="libs/jsPDF/jspdf.min.js"></script>
<script type="text/javascript" src="libs/jsPDF-AutoTable/jspdf.plugin.autotable.js"></script>
To export the table in PNG format, you need to include:
<script type="text/javascript" src="libs/html2canvas/html2canvas.min.js"></script>
To generate the export file in the desired format, finally include:
<script type="text/javascript" src="tableExport.min.js"></script>
Please keep this include order.
https://github.com/hhurz/tableExport.jquery.plugin
List<T> olan bir veriyi html çıktı olarak hazırlama…
devamını oku…
public static T SetXmlDataToViewModel&lt;T&gt;(T oViewModel, string xmlData)
{
if (string.IsNullOrEmpty(xmlData))
{
return oViewModel;
}
XDocument dataXmlDoc = XDocument.Parse(xmlData);
foreach (var prop in typeof(T).GetProperties())
{
if (dataXmlDoc.Descendants().SingleOrDefault(p =&gt; p.Name.LocalName == prop.Name) != null)
prop.SetValue(oViewModel, Convert.ChangeType(dataXmlDoc.Descendants().SingleOrDefault(p =&gt; p.Name.LocalName == prop.Name).Value, prop.PropertyType));
}
return oViewModel;
}
ASP.NET Core yakın zamana kadar ASP.NET 5 ismiyle anılıyordu. Geçtiğimiz haftalarda yayınlanan resmi bir yazı ile artık ASP.NET 5 yerine ASP.NET Core olarak isimlendirileceği belirtildi.
http://devnot.com/2016/asp-net-core-1-0-ve-asp-netin-gelecegi/
https://yazilimda.com/2016/04/asp-net-core-1-0-neler-sunuyor/
https://www.microsoft.com/net/core#windows