3 Hal Dasar Meningkatkan Kinerja Applikasi Menggunakan C#

29 Agustus 2014 1 komentar

Seringkali dalam membuat sebuah applikasi user mengeluhkan mengenai kinerja yang lambat dari applikasi tersebut. Tahukah anda terkadang kita sering kali menyepelekan beberapa hal yang menurut sebagian programmer terutama programmer pemula bahwa hal tersebut tidaklah penting, namun hal ini jika kita terapkan dapat mempengaruhi kinerja dari applikasi yang akan kita buat.
Dalam tulisan saya kali ini saya akan menjelaskan 3 hal dasar yang mungkin bermanfaat untuk meningkatkan kinerja applikasi yang sedang dikembangkan.

 

1 Boxing dan Unboxing

Variabel itu dibagi berdasarkan 2 type, variable berdasarkan value dan variable berdasarkan referensi,  valueType adalah variable yang mengacu pada nilai dari variable tersebut sedangkan referenceType adalah variable yang mengacu pada type data dari variable tersebut. Terkadang sering kali kita mengirimkan variable berbasis value  namun sebenarnya yang dibutuhkan adalah variable reference. C# telah memiliki teknologi yang dapat merubah valuetype menjadi reference type yang dinamakan boxing dan unboxing. Boxing adalah proses konversi variable valuetype menjadi reference type (object) , ketika CLR menemukan variable value maka akan dibungkus ke variable object (boxing) didalam heap,  dan kemudian meng-extract variable tersebut (Unboxing), Boxing itu implicit sedangkan Unboxing explicit. Hal ini dilakukan karena C# memiliki pandangan bahwa variable type apapun dapat diperlakukan sebagai object. Hal yang dilakukan CLR adalah :

  • Mengalokasikan variable object (didalam heap)
  • Menyalin data yang terdapat pada valuetype kedalam object tersebut.

Contoh :

int i = 10;
int j = 15;
Console.WriteLine(“Print Nilai : {0}, {1}”, i, j);

Mungkin kita sering kali menuliskan kode tersebut dan terasa familiar, namun sebenarnya hal dilakukan pada saat compile adalah :

int i = 10;
int j = 15;
object  obj1 = i;
object  obj2 = j;
Console.WriteLine(“Print Nilai : {0}, {1}”, obj1.ToString(), obj2.ToString());

Anda pasti kaget melihat kode tersebut padahal anda merasa tidak menulisnya seperti itu, hal ini dikarenakan C# akan melakukan Boxing dan Unboxing terhadap kode tersebut. Dan ini akan menciderai performance dari applikasi. Untuk menghidari hal tersebut sebaiknya kita melakukan ToString() pada fungsi WriteLine(), karena Write line membutuhkan variable ref.

Console.WriteLine(“Print Nilai : {0}, {1}”, i.ToString(), j.ToString());

 

2. StringBuilder

Dalam C# string sebenarnya adalah immutable(kekal) dan tidak dapat dirubah, ketika kita melakukan perubahan string maka sebenarnya kita membuat variable string baru, yang menggunakan memory yang lebih banyak dari yang dibutuhkan, contoh :

string msg = “Total Harga : ”; // object string1 created
msg = msg + “Rp. 10.000”; // object string 2 create
msg = msg + DateTime.Now; //object string3 create

dari kode diatas sebenarnya kita membuat 3 object string dan C# sebenarnya tidak melakukan perubahan pada variable tersebut, namun menambahkannya pada memory. Untuk memanipulasi data tersebut sebaiknya menggunakan StringBuilder. StringBuilder itu seperti string yang nilainya barisi karakter berurutan. Sekali kita membuat variable StringBuilder, kita dapat melakukan append, remove, replace bahkan menambahkan karakter. Sebaiknya anda merubah kode diatas menjadi:

StringBuilder sb = new StringBuilder();
sb.Append(“Total Harga :”);
sb.Append(“Rp. 10.000”);
sb.Append(DateTime.Now.ToString());

 

3. “As” vs “Cast”

Seorang programmer yang baik kadang menghindari proses perubahan type data pada variable, namun terkadang hal ini sering kali tidak dapat dihindari. Untuk melakukan konversi sebaiknya sedapat mungkin menggunakan metode As dibandingkan dengan Casting, karena hal ini lebih aman dan lebih efisien pada saat runtime. Untuk menggunakan metode casting anda harus menulis seperti ini :

object o = new object();
try
{
TypeBaru m = (TypeBaru) o;
if (m != null)
{
// Jalankan operasi disini
} else {
// report jika variable tersebut null
}
} catch {
// Report error konversi
}

sedangkan dengan menggunakan metode As kode yang akan ditulis menjadi seperti ini :

object o = new object();
TypeBaru m = o as TypeBaru;
if (m != null)
{
// Jalankan operasi disini
} else {
// report jika variable tersebut null
}

kode tersebut diatas sebenarnya sama, hanya saja dengan metode “as” akan melemparkan variable null jika object tersebut tidak dapat di konversi, sedangkan jika menggunakan cast maka akan melemparkan error jika tidak dapat dikonversi.

Kategori:.NET Framework

ASP.NET MVC JQGrid nuget V.1.1.2

15 Mei 2013 9 komentar

Update v.1.1.2

  • Add new Data Annotation Attribute Approach
  • Remove Dependencies of Jquery. (not actually needed in Jq.Grid. you should add by your self in project)

new Version of Jq.Grid can be access via nuget

https://nuget.org/packages/Jq.Grid/1.1.2

I added Data Annotation Attribute in Jq.Grid class model
Example usage of attributes includes:

Grid

[Grid(ID = "InvoiceGrid", AutoWidth = true, ...)]
public class GridModel
{
    ...
}

  • ID [string]

    Set ID of Grid. Default value is empty string.

  • AutoWidth [bool]

    Set auto resize width of Grid. Default value is false.

  • ShrinkToFit [bool]

    Sets a new width to the grid dynamically. Default value is true.

  • DataUrl [string]

    The dataUrl parameter represent the url action to get data of grid. Default value is empty string.

  • EditUrl [string]

    The EditUrl parameter represent the url action to edit data of selected grid. Default value is empty string.

  • ColumnReordering [bool]

    drag & drop column reordering of grid. Default value is false.

  • RenderingMode [enum]

    Grid RenderingMode. Default value is RenderingMode.Default.

  • MultiSelect [bool]

    enabled multi selection of rows in grid. Default value is false.

  • MultiSelectMode [enum]

    multi selection of rows setting. Default value is MultiSelectMode.SelectOnRowClick.

  • MultiSelectKey [enum]

    multi selection of rows Key. Default value is MultiSelectKey.None.

  • Width [int]

    Width of grid. Default value is 0.

  • Height [int]

    Height of grid. Default value is 0.

Kategori:.NET Framework

ASP.NET MVC JQGrid nuget V.1.1.0

25 April 2013 40 komentar

Update v.1.1.0

  • Add Data Annotation Attribute Approach
  • Fix some minor issue

new Version of Jq.Grid can be access via nuget

https://nuget.org/packages/Jq.Grid/1.1.0

I make more simple coding by using Data Annotation Attribute

Here Sample to use Data Annotation Approach

Controller

using Jq.Grid.Sample.Models;
using System.Linq;
using System.Web.Mvc;

namespace Jq.Grid.Sample.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            JQGridModel<invheader> model = new JQGridModel<invheader>("JsonExample");
            model.Grid.DataUrl = Url.Action("Data");
            return View(model);
        }

        [HttpPost]
        public JsonResult Data()
        {
            JQGridModel<invheader> model = new JQGridModel<invheader>();
            using (DataContext ctx = new DataContext())
            {
                return model.Grid.DataBind(ctx.InvoiceHeader.AsQueryable());
            }
        }
    }
}

Model

using System;
using System.ComponentModel.DataAnnotations;

namespace Jq.Grid.Sample.Models
{
    public class invheader
    {
        [Key, GridColumn(Visible = false)]
        public int id { get; set; }
        [GridColumn(HeaderText = "Invoice Date", DataFormatString = "{0:MM/dd/yyyy}")]
        public DateTime invdate { get; set; }
        [GridColumn(HeaderText = "Customer Name")]
        public string name { get; set; }
        [GridColumn(DataFormatString = "{0:C}")]
        public double amount { get; set; }
        [GridColumn(DataFormatString = "{0:0.00\\%}")]
        public double tax { get; set; }
        [GridColumn(DataFormatString = "{0:C}")]
        public double total { get; set; }
        [GridColumn(DataFormatString = "{0:C}")]
        public string note { get; set; }
        [GridColumn(DataFormatString = "{0:Yes;0;No}")]
        public bool IsPaid { get; set; }
    }
}

View

@model Jq.Grid.JQGridModel<Jq.Grid.Sample.Models.invheader>
@{
    ViewBag.Title = "Index";
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>JSON Example</title>

    <!-- The jQuery UI theme that will be used by the grid -->
    @Styles.Render("~/Content/themes/base/css")

    <!-- The jQuery UI theme extension jqGrid needs -->
    <link href="/Content/ui.jqgrid.css" rel="stylesheet" />
</head>
<body>

    <!-- The Partial HTML Grid Table -->
    @Html.Grid().JQGridPartial(Model.Grid)

    <!-- JavaScript at the bottom for fast page loading -->
    @Scripts.Render("~/bundles/jquery")
    <!-- The localization file we need, English in this case -->
    <script src="/Scripts/i18n/grid.locale-en.js"></script>
    <!-- The jqGrid client-side javascript -->
    <script src="/Scripts/jquery.jqGrid.src.js"></script>
    <!-- The Grid Script client-side javascript -->
    @Html.Grid().JQGridScript(Model.Grid)
</body>
</html>

Full sample can be download at github
https://github.com/aiska/Jq.Grid

Kategori:.NET Framework

ASP.NET MVC JQGrid nuget V.1.0.1

23 April 2013 14 komentar

Update v.1.0.1
* Fix DataFormatString render, add boolean string value
* Using Jq.Grid v.4.4.5 (http://www.trirand.com/blog/?p=1047) (i modify some code in js)

This is sample how to use DataFormatString boolean value to string

new JQGridColumn
{
    DataField = "IsDefault",
    HeaderText = "Default",
    DataFormatString = "{0:Yes;0;No}",
    DataType = typeof(bool)
}

You can download update version in nuget
https://nuget.org/packages/Jq.Grid/1.0.1

Next Todo in v.1.1.0
* Using Data Anotation in Column Grid
* Using IFormatter to Convert and Reconvert
* Auto detect DataType in Column Property
* Supporting for Entity Framework 6 (stored procedure) (for insert, update, delete)
* supporting WebApi

I’m very happy to see people downloading the project, and would be glad to get some feedback from you,

So please let me know if you have any problems or other feature requests!

Thanks For your appreciation

Regard,

Aiska Hendra

New Update v.1.1.0

Kategori:.NET Framework

ASP.NET MVC JQGrid nuget

6 Februari 2013 98 komentar

base on My Previous Article I have a lot of change in my JqGrid, and from now JqGrid can be accessed via nuget
 
Jq.Grid Nuget
 

To install ASP.NET MVC JQGrid, run the following command in the Package Manager Console

PM> Install-Package Jq.Grid

Controller :

using Jq.Grid.Demo.Models;
using System;
using System.Linq;
using System.Web.Mvc;

namespace Jq.Grid.Demo.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            JsonExampleGridModel model = new JsonExampleGridModel();
            model.Grid.DataUrl = Url.Action("Data");
            return View(model);
        }

        [HttpPost]
        public JsonResult Data()
        {
            JsonExampleGridModel model = new JsonExampleGridModel();
            using (DataContext ctx = new DataContext())
            {
                return model.Grid.DataBind(ctx.InvoiceHeader.AsQueryable());
            }
        }
    }
}

Model:

using System;
using System.Collections.Generic;

namespace Jq.Grid.Demo.Models
{
    public class invheader
    {
        public int id { get; set; }
        public DateTime invdate { get; set; }
        public string name { get; set; }
        public double amount { get; set; }
        public double tax { get; set; }
        public double total { get; set; }
        public string note { get; set; }
    }

    public class JsonExampleGridModel : JQGridModel
    {
        public JsonExampleGridModel()
        {
            Grid = new JQGrid
            {
                ID = "JsonExample",
                Columns = new List<JQGridColumn>
                {
                    new JQGridColumn 
                    {
                        DataField = "id",
                        HeaderText = "Inv No",
                        PrimaryKey = true,
                        DataType = typeof(int),
                    },
                    new JQGridColumn 
                    {
                        DataField = "invdate",
                        HeaderText = "Date",
                        DataType = typeof(DateTime)
                    },
                    new JQGridColumn 
                    {
                        DataField = "name",
                        HeaderText = "Client",
                        DataType = typeof(string)
                    },
                    new JQGridColumn 
                    {
                        DataField = "amount",
                        HeaderText = "Amount",
                        DataType = typeof(double)
                    },
                    new JQGridColumn 
                    {
                        DataField = "tax",
                        HeaderText = "Tax",
                        DataType = typeof(double)
                    },
                    new JQGridColumn 
                    {
                        DataField = "total",
                        HeaderText = "Total",
                        DataType = typeof(double)
                    },
                    new JQGridColumn 
                    {
                        DataField = "note",
                        HeaderText = "Notes",
                        DataType = typeof(string)
                    }
                }
            };
        }
    }
}

View :

@model Jq.Grid.Demo.Models.JsonExampleGridModel
@{
    ViewBag.Title = "Index";
    Layout = null;
}

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>JSON Example</title>

    <!-- The jQuery UI theme that will be used by the grid -->
    @Styles.Render("~/Content/themes/base/css")

    <!-- The jQuery UI theme extension jqGrid needs -->
    <link href="/Content/ui.jqgrid.css" rel="stylesheet" />
</head>
<body>

    <!-- The Partial HTML Grid Table -->
    @Html.Grid().JQGridPartial(Model.Grid)

    <!-- JavaScript at the bottom for fast page loading -->
    @Scripts.Render("~/bundles/jquery")
    <!-- The localization file we need, English in this case -->
    <script src="/Scripts/i18n/grid.locale-en.js"></script>
    <!-- The jqGrid client-side javascript -->
    <script src="/Scripts/jquery.jqGrid.src.js"></script>
    <!-- The Grid Script client-side javascript -->
    @Html.Grid().JQGridScript(Model.Grid)
</body>
</html>

The full sample code can be accessed via github
Jq.Grid

Kategori:.NET Framework

Perbedaan Antara DTO dan POCO

25 Januari 2013 13 komentar

GambarTulisan saya kali ini akan membahas mengenai perbedaan antara konsep DTO (Data Transfer Object) dan POCO (Plain Old CLR Object).
Tulisan ini saya buat karena banyak yang beranggapan bahwa konsep DTO dan POCO adalah sama, mudah-mudahan dengan sedikit penjelasan kita bisa memahami perbedaan konsep keduanya.

Apa yang dimaksud dengan Data Transfer Object (DTO)?

Menurut wikipedia yang dimaksud dengan DTO adalah

“The difference between Data Transfer Objects and Business Objects or Data Access Objects is that a DTO does not have any behaviour except for storage and retrieval of its own data (accessors and mutators).”

jika diterjemahkan kurang lebih adalah sebagai berikut :
“Perbedaan antara Data Transfer Objects dan Business Objects atau Data Access Objects adalah bahwa DTO tidak memiliki method apapun kecuali untuk penyimpanan dan pengambilan data sendiri (accesor dan mutator).”

Jadi konsep utama dari DTO adalah penyimpanan data, sehingga DTO tidak memiliki metode/fungsi selain accesor dan mutator (Get,Set) yang hanya digunakan untuk mendapatkan dan mengatur data. Lalu mengapa begitu simple? hal ini bertujuan agar kita dapat mengetikkan dengan sedikit code namun powerfull dan ringan. Biasanya pendekatan DTO dijadikan sebagai wadah untuk memindahkan data dari DAL (data access layer) ke BAL (bussiness access layer) atau antara lapisan dimasing-masing dalam arsitektur n-tier. Berikut ini kode untuk pendekatan DTO

public class Currency
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
    public string Prefix { get; set; }
    public string Sufix { get; set; }
    public double Rate { get; set; }
    public string Description { get; set; }
    public bool IsDefault { get; set; }

    // Konstruktor
    public Currency()
    {
        this.Id = 0;
        this.Code = string.Empty;
        this.Name = string.Empty;
        this.IsDefault = false;
        this.Rate = 1;
        this.Prefix = string.Empty;
        this.Sufix = string.Empty;
        this.Description = string.Empty;
    }
}

Jadi, singkatnya, DTO hanyalah sebuah kumpulan data. Class ini tidak memiliki validasi, tidak ada logika bisnis, tidak ada logika apapun. Ini sangat sederhana, ringan dan hanya dijadikan wadah untuk memindahkan data.

Apa POCO?

POCO merupakan singkatan dari (Plain Old CLR Object) atau ada juga yang mengatakan (Plain Old C# Object). POCO sebenarnya adalah versi .Net dari POJO (Plain Old Java Object). Pendekatan POCO lebih kearah Bisnis Object yang memiliki data, validasi, dan setiap logika bisnis lain yang ingin ditempatkan di sana. Tapi ada satu hal yang tidak dimiliki POCO, POCO tidak memiliki persistensi. Pendekatan POCO tidak memiliki fungsi Currency.GetById() atau Currency.Save(). POCO hanya berisi data dan logika domain, tidak ada logika persistensi apapun disana.

Berikut ini adalah kode untuk kelas POCO CurrencyBAL. Di kode tersebut anda akan melihat bahwa tidak ada logika persistensi apapun disana, hanya data dan fungsi validasi. Anda juga akan melihat bahwa kode tersebut tidak membuat sekelompok accesor dan mutator (Get, Set) untuk data currency saya. Karena akan mengacaukan kelas Currency saya yang telah didefinisikan di kelas Currency. Sebaliknya saya hanya memiliki satu properti bernama Data yang merupakan kelas Currency. Dengan pendekatan ini memudahkan kita untuk mendapatkan dan menyimpan data currency.

public class CurrencyBAL
{
    public Currency Data { get; set; }

    public CurrencyBAL()
    {
        this.Data = new Currency();
    }

    public CurrencyBAL(Currency currency)
    {
        this.Data = currency;
    }

    public List<ValidationError> Validate()
    {
        List _validations = new List<ValidationError>();

        if (string.IsNullOrEmpty(this.Data.Name))
        {
            _validations.Add(new ValidationError("Currency Name Harus diisi."));
        }

        // Blaa.... Blaa....Blaa....
        // Silahkan lanjutkan lagi jika anda ada ide
        return _validations;
    }
}

So.. Tidak ada logika persistensi disana, hanya data dan logika validasi. Mungkin anda berpikir, jika tidak ada logika persistensi disana lalu bagaimana cara mendapatkan dan menyimpan data? Jawabannya adalah, kelas lain. POCO harus terhidrasi oleh beberapa kelas lain yang merangkum logika persistensi untuk entitas tersebut, seperti repositori atau pengontrol data. Saya biasanya menggunakan repositori. Untuk contoh ini saya menggunakan kelas Repository<Currency> yang merangkum logika untuk mendapatkan objek currency, kemudian menetapkan CurrencyBAL.Data = currency. Kelas Repository<Currency> saya memiliki metode Save() dan GetById(). Kode untuk mendapatkan dan menetapkan entitas orang UI saya terlihat seperti ini:

            Repository<Currency> currencies = new Repository<Currency>();
            Currency current = currencies.GetByID(1);
            current.Code = "IDR";
            // Bla... Bla... Bla...

            // Simpan ke database
            currencies.Save();

Kenapa harus menggunakan cara ini?

Pertanyaan berikutnya adalah: Apa gunanya? Mengapa saya harus menggunakan pola-pola tersebut, dan bukan hanya menggunakan DataTables dan menempatkan semua logika persistensi saya di objek entitas saya? Jawabannya adalah. Saya lebih suka arsitektur POCO / Repository / DTO, mungkin bagi beberapa developer beranggapan itu bukan cara yang tepat untuk merancang aplikasi. Namun saya berpikir manfaat terbesar dari metode ini adalah bahwa arsitektur ini yang sangat bersih dan mudah untuk di maintain. Dengan menggunakan metode ini kita memisahkan tugas dari masing-masing object antara Logika Bisnis dan Logika Persistensi, yang lebih sesuai dengan Prinsip Tanggung Jawab Single dimana masing-masing melakukan fungsinya sendiri tanpa tumpang tindih. Penggunaan metode POCO, DTO dan DAL yang baik akan memudahkan developer dalam mengembahkan arsitektur applikasi yang tepat. Banyak ORM yang menggunakan metode ini seperti Entity Framework, nHibernate, dan masih banyak lagi.

Jadi, kesimpulannya, sebaiknya belajarlah mencintai POCO, dan pastikan Anda tidak menyebar informasi yang salah tentang POCO dan DTO. DTO adalah property data yang digunakan untuk memindahkan data antara lapisan aplikasi. sedangkan POCO adalah bisnis object yang lengkap, namun tidak memiliki fungsi persistensi.

Kategori:Tidak Dikategorikan

Aiskanix Image Editor using Jquery and Kinetic JS

2 November 2012 6 komentar

Features

  • Fit in Image to canvas
  • Rotate image clock wise and counter clock wise
  • Change display orientation to potrait and landscape.
  • Zoom and scale image.
  • Move image

Future Features

  • create collage image.
  • add Effect on image.
  • create color setting, brightness, contrast, saturation, etc.
  • Create Stamp and Text on canvas.

How to use

Installation

To use the aiskanix component, include the jQuery library and the kineticjs source file into your HTML document:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.0.1.js"></script>
<script type="text/javascript" src="js/jquery.aiskanix.js"></script>

[HTML]

<body>
    <div id="aiskanix_canvas"></div>
</body>

[Javascript]

<script type="text/javascript">
    $(function () {
        $('#aiskanix_canvas').aiskanix({ width: 300, height: 450 });
    });
</script>

Configuration

.aiskanix( Method, [Options] )

Method: functions
Options: An array to configure the properties of aiskanix

Methods

show_pic( config )
Show picture to canvas.

$('#aiskanix_canvas').aiskanix('show_pic', { images_url: 'img/1.jpg', draggable: true });

fit_in()
fit in image to canvas.

$('#aiskanix_canvas').aiskanix('fit_in');

fill_in()
Fill in image to canvas.

$('#aiskanix_canvas').aiskanix('fill_in');

move( x, y )
Move image to plus x and plus y by pixel.

// move left 5 pixel
$('#aiskanix_canvas').aiskanix('move', -5, 0);

// move right 5 pixel
$('#aiskanix_canvas').aiskanix('move', 5, 0);

// move up 5 pixel
$('#aiskanix_canvas').aiskanix('move', 0, -5);

// move down 5 pixel
$('#aiskanix_canvas').aiskanix('move', 0, 5);

rotate( cw )
Rotate image 90 degree clock wise or counter clock wise.

//Rotate image to 90 degree clock wise
$('#aiskanix_canvas').aiskanix('rotate', true);

//Rotate image to 90 degree counter clock wise
$('#aiskanix_canvas').aiskanix('rotate', false);

rotate_deg( deg )
Rotate image by degree of rotation.

//Rotate image to 45 degree
$('#aiskanix_canvas').aiskanix('rotate_deg', [45]);

Options

width: null (Required)
type: number
Width of canvas.
default : null

height: null (Required)
type: number
Height of canvas.
default : null

images_url: null (Required)
type: string
url of images.
default : null

x: 0
type: number
Horizontal Position of image.
default : 0

y: 0
type: number
Vertical Position of image.
default : 0

offset: { x: 0, y: 0 }
type: object
Offset Position of image.
default : { x: 0, y: 0 }

draggable: true
type: bool
image can be draggable.
default : true

potrait: true
type: bool
image orientation, potrait if true and Landscape if false.
default : true

rotation: 0
type: int
Rotation anggle (in degree) of image.
default : 0

scale: 1
type: float
Scale of image, default is 1, same as original image size scale.
default : 1

auto_fill_in: true
type: bool
If true, image is automatic Fill in when it draw.
default : true

auto_orientation: true
type: bool
If true, canvas is automaticly set to default orientation of image.
default : true

Kategori:Tidak Dikategorikan

Simple Map Using Jquery UI Map in ASP .Net MVC

11 Maret 2012 4 komentar

In the latest Aiska Library I Add new map module. this module is in under Aiska.Web.Map.

this idea is very simple, just add google map using ASP .Net MVC.

Ok, i will show you how to make simple map using Jquery Map in ASP .net MVC.

First, you must add my new Aiska Library to your project. you can read my previous article to add here

Second, Let create model for the map.

    using System;
    using Aiska.Web.Map;
    using System.Web.UI.WebControls;
    public class MapModel
    {
        public Map Maps { get; set; }

        public MapModel()
        {
            Maps = new Map()
            {
                ID = "map_canvas",
                // Set Default Zoom Level
                Zoom = 14,
                // Set display map
                Height = Unit.Pixel(400),
                Width = Unit.Pixel(600),
                // Display Map Type Hybrid
                MapType = MapTypes.Hybrid,
                // Disable default UI Maps
                DefaultUI = false,
                // Disable Double click to Zoom
                DoubleClickZoom = false,
                // Disable Drag the map
                Draggable = false,
                // Let's set the center point at Monas, Jakarta, Indonesia
                Center = new MapPoint() { Latitude = -6.175664f, Longitude = 106.8289265f }
            };
        }
    }

Third, Let’s create controller for the map

    using System;
    using System.Web.Mvc;
    using Aiska.Web.Map;
    using SimpleMap.Models;
    public class MapController : Controller
    {
        //
        // GET: /Map/

        public ActionResult Index()
        {
            MapModel model = new MapModel();
            return View(model);
        }
    }

And the last but not least, Let add the the map in the View by using HtmlHelper

To add map, you just call the html helper .MapFor in View

@Html.Aiska().MapFor(Model.Maps)

It’s Done…
Simple isn’t it. And the result should be like this

Before I forget the Full sample you can download here

My next project is add marker by using json.  I hope this can be done

Thank you…

Best Regard,
Aiska Hendra

Senior Developer
Enerren Technologies

Kategori:Tidak Dikategorikan

Using JQGrid ASP .Net MVC

9 Maret 2012 103 komentar

After i read Phil Haack about Using jQuery Grid With ASP.NET MVC, i have idea to create my own library to create JQGrid module. Then I search reference to build it. then I’ve got library  from trirand . I create this library Base on Trirand JQGrid for MVC Library structure.

I fix some issue in trirand library, among others:

  • can filter Null and Not Null data, which is in trirand library is not support
  • Optimize data access. using Entity framework and Dynamic Query to access data.
  • Add Multiple Row Footer.
  • And More…

In this articles i want to share how to make JQGrid ASP .Net MVC.

First… Create New MVC Project

After Create New MVC Project, you should add Aiska Library reference to your project, the library can be download here

Second, add Entity model for Grid.in this case i’m using Northwind database.

After you create entity model for grid lets create the model for grid,

using System;
using System.Collections.Generic;
using Aiska.Web.Jquery;
using System.Web.UI.WebControls;
    public class OrderGridModel
    {
        public Grid OrderGrid { get; set; }
        public Grid OrderDetailGrid { get; set; }

        public OrderGridModel()
        {
            OrderGrid = new Grid()
            {
                Height = Unit.Percentage(100),
                ID = "Orders",
                Columns = new List<GridColumn>()
                {
                    new GridColumn()
                    {
                        DataField = "OrderId",
                        PrimaryKey = true,
                    },
                    new GridColumn()
                    {
                        DataField = "RequiredDate",
                    },
                    new GridColumn()
                    {
                        DataField = "ShippedDate",
                    },
                    new GridColumn()
                    {
                        DataField = "CompanyName",
                    },
                    new GridColumn()
                    {
                        DataField = "ShipName",
                        HeaderText = "Ship To"
                    }
                }
            };

            OrderDetailGrid = new Grid()
            {
                ID = "Orders",
                Height = Unit.Percentage(100),
                Columns = new List<GridColumn>()
                {
                    new GridColumn()
                    {
                        DataField = "Product",
                    },
                    new GridColumn()
                    {
                        DataField = "Price",
                        TextAlign = Aiska.Web.Jquery.TextAlign.Right,
                        DataFormatString = "{0:#,##0.00;;-}"
                    },
                    new GridColumn()
                    {
                        DataField = "Quantity",
                        TextAlign = Aiska.Web.Jquery.TextAlign.Right
                    },
                    new GridColumn()
                    {
                        DataField = "Discount",
                        TextAlign = Aiska.Web.Jquery.TextAlign.Right,
                        DataFormatString = "{0:#,##0.00;;-}"
                    },
                    new GridColumn()
                    {
                        DataField = "Total",
                        TextAlign = Aiska.Web.Jquery.TextAlign.Right,
                        DataFormatString = "{0:#,##0.00;;-}"
                    }
                }
            };

            OrderGrid.ClientSideEvents.SubGridRowExpanded = "ShowSubGrid";
            OrderGrid.HierarchySettings.HierarchyMode = HierarchyMode.Parent;
            OrderGrid.ToolBarSettings.ShowRefreshButton = true;

            OrderDetailGrid.HierarchySettings.HierarchyMode = HierarchyMode.Child;
            OrderDetailGrid.ToolBarSettings.ShowRefreshButton = true;
            OrderDetailGrid.AppearanceSettings.ShowFooter = true;
            OrderDetailGrid.AppearanceSettings.FooterRow = 3;

Third, Create Controller for Order Grid

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Aiska.Web.Jquery;

    public class OrderController : Controller
    {
        //
        // GET: /Order/

        public ActionResult Index()
        {
            OrderGridModel model = new OrderGridModel();
            model.OrderGrid.DataUrl = Url.Action("GetData");
            model.OrderDetailGrid.DataUrl = Url.Action("GetDetailData");
            return View(model);
        }

        public JsonResult GetData()
        {
            OrderGridModel model = new OrderGridModel();
            var context = new NORTHWNDEntities();
            var data = from o in context.Orders
                       join c in context.Customers
                       on o.CustomerID equals c.CustomerID
                       select new {o.OrderID, o.RequiredDate, o.ShippedDate, c.CompanyName, o.ShipName};
            return model.OrderGrid.DataBind(data);
        }

        public JsonResult GetDetailData(int parentRowId)
        {
            OrderGridModel model = new OrderGridModel();
            model.OrderDetailGrid.DataResolved += new GridDataResolvedEventHandler(GrandTotal);
            var context = new NORTHWNDEntities();
            var data = from o in context.Order_Details
                       join p in context.Products
                       on o.ProductID equals p.ProductID
                       where o.OrderID == parentRowId
                       select new OrderDetailModel ()
                       {
                           Product = p.ProductName,
                           Price = (double)o.UnitPrice,
                           Quantity = o.Quantity,
                           Discount = (double)o.Discount * (double)o.UnitPrice,
                           Total = (double)o.Quantity * (double)o.UnitPrice
                        };
            return model.OrderDetailGrid.DataBind(data);
        }
        void GrandTotal(object sender, GridDataResolvedEventArgs e)
        {
            GridColumn Price = e.GridModel.Columns.Find(c => c.DataField == "Price");
            GridColumn SubTotal = e.GridModel.Columns.Find(c => c.DataField == "Total");
            var context = new NORTHWNDEntities();
            IQueryable<OrderDetailModel> data = (IQueryable<OrderDetailModel>)e.CurrentData;

            double subtotal = data.Sum(c => c.Total);
            double discount = data.Sum(c => c.Discount);

            Price.FooterValue[0] = "Total: ";
            Price.FooterValue[1] = "Discount: ";
            Price.FooterValue[2] = "Grand Total: ";
            SubTotal.FooterValue[0] = subtotal != 0 ? string.Format("{0:#,###.00;;-}", subtotal) : "-";
            SubTotal.FooterValue[1] = discount != 0 ? string.Format("{0:#,###.00;;-}", discount) : "-";
            SubTotal.FooterValue[2] = string.Format("{0:#,###.00;;-}", (subtotal - discount));
        }
    }

Then Create View for Grid

@using Aiska.Web.Mvc
@using Aiska.Web.Jquery
@model MvcMultiRowFooterJQGrid.Models.OrderGridModel

@{
    ViewBag.Title = "Multiple Footer Row";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@Html.Aiska().Grid(Model.OrderGrid)
@Html.Aiska().Grid(Model.OrderDetailGrid)
<script type="text/javascript">
    function ShowSubGrid(subgrid_id, row_id) {
        showSubGrid_Orders(subgrid_id, row_id);
    }
</script>

If Success and no error the display should be like this

The Full sample you can download here

please Don’t hesitate to ask in comment or send me mail at aiska_hendra@yahoo.com

I’m sorry for my bad English.

Thank you…

Best Regard,
Aiska Hendra

Senior Developer
Enerren Technologies

Kategori:ASP .NET, C#, JQuery, MVC

Kelebihan dan kekurangan Teknologi Microsoft

22 Agustus 2011 4 komentar

Di dunia rekayasa perangkat lunak tidak dapat dipungkiri bahwa microsoft telah memberikan andil yang cukup besar didalam industri teknologi dan informasi.  Produk yang telah dihasilkan microsoft telah dapat kita nikmati hingga saat ini, bahkan hampir semua produk microsoft telah dapat terintegrasi dengan baik.

Dengan keunggulan tersebut bukan berarti microsft tidak memiliki kelemahan atau kekurangan, produk-produk yang dihasilkan microsoft juga memiliki kekurangan, untuk itu saya akan coba mengupas apa kelebihan dan kekurangan dari produk microsoft yang ada saat ini dan membandingakannya dengan produk lain yang sejenis.

Sistem Operasi

Sistem Operasi yang dimiliki microsoft saat ini merupakan sistem operasi yang paling banyak digunakan diseluruh dunia, produk sistem operasi microsoft yang lebih kita kenal sebagai “Micosoft Windows” merupakan sistem operasi yang cukup mudah, varian dari windows juga cukup banyak, mulai dari sistem operasi yang diperuntukkan bagi end user, professional, hingga sistem operasi untuk server.  Selain microsoft windows sistem operasi lain yang kita kenal adalah Linux yang berbasis Unix, sistem operasi ini juga cukup banyak digunakan. Kelebihan dan kekurangan dari Windows dan Linux antara lain:

Kelebihan Microsoft Windows

  • Microsoft telah membuat beberapa kemajuan dan perubahan yang membuatnya menjadi jauh lebih mudah dalam menggunakan Sistem Operasi, meskipun hal ini masih dapat diperdebatkan namun sistem operasi Microsoft Windows masih jauh lebih mudah dibandingkan dengan Linux.
  • Perangkat lunak serta alat bantu lain yang tersedia untuk sistem operasi Windows lebih banyak dan lebih besar, sehingga memudahkan penggunanya dalam melakukan aktivitas.
  • Microsoft Windows memiliki team support sendiri serta memiliki banyak dokumentasi, baik yang sifatnya offline maupun online yang dapat membantu pengguna dalam menggunakan Windows, selain itu banyak juga tersedia buku dan tutorial lainnya untuk masing-masing versi windows.

Kelebihan Linux

  • Mayoritas varian atau distro dari linux adalah gratis, kalaupun ada varian dari linux yang berbayar, harga dari lisensi yang harus dibayar masih jauh lebih murah dibandingkan Windows.
  • Linux merupakan sistem operasi yang relatif cukup aman, bukan berarti sistem operasi Linux tidak bebas dari virus dan serangan lainnya, namun jauh lebih aman dibandingkan dengan Microsoft Windows.
  • Mayoritas Sistem Operasi Linux lebih handal, Linux dapat dioperasikan berbulan tanpa perlu dilakukan restart.

Kekurangan Microsoft

  • Microsoft windows merpakan sistem operasi yang relatif mahal. Lisensi untuk Microsoft Windows antara $ 50.00 hingga $ 150,00 dollar AS per setiap lisensi
  • meskipun pihak Microsoft Windows telah melakukan perbaikan keamanan terhadap sistem namun hingga saat ini windows masih rentan terhadap serangan virus dan keamanan sistem.
  • Hal ini mungkin masih dapat diperdepatkan, namun dari sisi ketangguhan, meskipun telah banyak perbaikan dan pengembangan dari pihak Microsoft, sistem operasi Windows masih belum setangguh Linux.

Kekurangan Linux

  • Dalam hal kemudahan penggunaan, Linux masih merupakan Sistem Operasi yang tidak mudah untuk digunakan, dan user yang dapat mengoperasikan Linux tidak sebanyak Windows.
  • Ketersediaan perangkat lunak dan alat bantu lainnya cukup banyak, namun terkadang pilihannya terbatas dan tidak sebanyak Microsoft Windows.
  • Keterbatasan dan ketersediaan dukungan hardware dalam hal driver cukup sedikit, beberapa perusahaan penyedia perangkat keras terkadang tidak menyediakan driver atau dukungan untuk perangkat keras sistem operasi Linux.

Sistem Manajemen Basisdata (DBMS)

Sebuah sistem manajemen basisdata atau dalam bahasa Inggrisnya dikenal sebagai database management system (DBMS) adalah sebuah program komputer (atau secara lebih tipikal adalah seperangkat program komputer) yang didisain untuk mengatur/memanajemen sebuah basisdata sebagai sekumpulan data yang disimpan secara terstruktur, dan melakukan operasi-operasi atas data atas permintaan penggunanya. Contoh penggunaan DBMS ada banyak sekali dan dalam berbagai bidang kerja, misalnya akuntansi, manajemen sumber daya manusia, dan lain sebagainya. Meskipun pada awalnya DBMS hanya dimiliki oleh perusahaan-perusahaan berskala besar yang memiliki perangkat komputer yang sesuai dengan spesifikasi standar yang dibutuhkan (pada saat itu standar yang diminta dapat dikatakan sangat tinggi) untuk mendukung jumlah data yang besar, saat ini implementasinya sudah sangat banyak dan adaptatif dengan kebutuhan spesifikasi data yang rasional sehinggal dapat dimiliki dan diimplementasikan oleh segala kalangan sebagai bagian dari investasi perusahaan.

Produk dari DBMS antara lain: Microsoft SQL Server, Oracle, dan masih banyak lagi. Kelebihan dan kekurangan dari masing-masing produk antara lain:

Kelebihan Microsoft SQL Server

  • Sistem Basis Data dengan level Enterprise, Microsoft SQL Server termasuk DBMS profesional. Beberapa pesaing seperti MySQL, Oracle, telah mengembangkan software serupa dalam beberapa tahun terakhir, tetapi Microsoft SQL Server lebih mudah digunakan dan memiliki lebih banyak fitur. Pemicunya antara lain adalah dukungan penuh dari Microsoft. Perangkat lunak yang ditawarkan oleh Microsoft juga menawarkan integrasi yang erat dengan .NET framework, dan ini tidak dimiliki oleh produk lain.
  • Penanganan data korup, Data yang korup selalu menjadi pusat perhatian ketika Perangkat keras dan perangkat lunak tidak dapat bekerja dengan optimal sebagaimana mestinya. Microsoft SQL Server memiliki sejumlah fitur dalam restorasi data dan pemulihan data. Meskipun beberapa tabel individu tidak dapat didukung atau dikembalikan, namun pilihan database yang lengkap dan restorasi yang tersedia dalam SQL Server sangat membantu . Melalui penggunaan file log, cache, dan backup, produk Microsoft yang memungkinkan Anda untuk merasa yakin bahwa ada banyak pilihan dalam menangani bencan.
  • Installasi yang effisien, Microsoft SQL Server dapat diinstal dengan dengan mudah, installer juga mendeteksi, download dan menginstal update yang diperlukan dalam prasyarat installasi SQL Server. Fitur-fitur ini mengurangi kompleksitas dalam menginstal perangkat lunak. Komponen individu seperti Database Services, Analysis Services dan Integration Services juga dapat diinstal secara terpisah. SQL Server 2008 juga secara otomatis dapat melakukan update patch keamanan untuk mengurangi biaya pemeliharaan.
  • Fitur Kinerja yang lebih baik, Microsoft SQL Server 2008 memiliki kompresi dan enkripsi data transparan built in, sehingga tidak perlu untuk memodifikasi atau mengubah program untuk mengenkripsi data. SQL Server 2008 memiliki kontrol akses yang lebih efisien dan alat izin manajemen dan menawarkan kinerja yang lebih baik dalam pengumpulan data. SQL Server 2008 juga terintegrasi dengan Microsoft Office dan produk microsoft lainnya.
  • Fitur Keamanan yang lebih baik, SQL Server 2008 memiliki otentikasi yang kuat dan perlindungan akses serta memiliki fitur manajemen password yang lebih baik. SQL Server 2008 menggunakan Kebijakan Manajemen Berbasis untuk mendeteksi ketidakpatuhan kebijakan keamanan, yang memungkinkan hanya personil yang berwenang akses ke database. Keamanan audit dan peristiwa dapat ditulis secara otomatis ke log file.
  • Menurunkan biaya kepemilikan, modul-modul dalam SQL Server 2008 termasuk Kompresi Lanjutan, alat manajemen data, partisi disk, alat data mining, Pelaporan Enterprise, dan Advanced Security tanpa biaya tambahan. SQL Server 2008 juga kompatibel dengan SQL Server 2000 dan 2005, sehingga tidak perlu memperbarui atau meng-upgrade setiap komputer.
  • Fakta, beberapa korporasi seperti Unilever, HM Sampoerna, Phillip Morris, dan Siemens menggunakan Microsoft SQL Server 2008. SQL Server 2008 diakui sebagai Best Seller dan Pertumbuhan Terbaik oleh majalah CRN.

Kekurangan Microsoft SQL Server

  • Biaya,  Salah satu kelemahan utama untuk menggunakan Microsoft SQL Server adalah karena SQL Server bukan sistem manajemen database relasional alternatif, pilihan lisensi yang ada cukup mahal. Meskipun menggunakan perangkat lunak untuk pengembangan atau tujuan pendidikan adalah gratis, namun dalam penggunaan bisnis ada biaya lisensi. Untuk SQL Server 2008, misalnya, SQL Server Standard Edition biaya $ 7.171 per prosesor. SQL Server Datacenter edisi yang $ 54.990 per prosesor, menurut situs Microsoft.
  • Kompatibilitas yang terbatas, Microsoft SQL Server hanya dirancang untuk berjalan pada server berbasis Windows. Untuk berbagai alasan, termasuk biaya lisensi dan masalah keamanan. Selain tidak mampu berjalan di platform non-Windows, terkadang ada juga masalah kompatibilitas tentang interaksi dengan aplikasi yang berjalan pada platform lainnya.
  • Perangkat Keras, Versi SQL Server dapat diinstal pada peralatan hardware yang lebih tua, tapi rilis baru dari aplikasi yang memerlukan teknologi yang lebih canggih untuk mendukung sumber daya yang dibutuhkan oleh database. SQL Server juga membutuhkan NET framework. Diinstal pada mesin, yang merupakan komponen terpisah yang digunakan oleh pengembang. Jika perusahaan berencana untuk memiliki database yang sangat besar, hard drive juga membutuhkan jumlah yang tepat ruang di samping gigabyte ruang yang diperlukan untuk mesin database sendiri.

Kelebihan Oracle

  • Kepuasan Pelanggan, Salah satu keuntungan menggunakan database Oracle adalah karena pelayanan Oracle dalam melayani kepuasan pelanggan. Sebagai contoh, semua database Oracle yang kompatibel. Hal ini memungkinkan perusahaan untuk meng-upgrade sistem mereka tanpa melakukan perombakan total pada sistem database mereka. Hal ini membuat update menjadi lebih efisien dan rendah biaya. Selain itu, versi terbaru dari database Oracle menyediakan fitur baru sementara untuk menjaga fitur populer dari versi lama. Hal ini memastikan bahwa produk mereka didasarkan pada fungsi pelanggan daripada apa adalah biaya-efektif untuk Oracle.
  • Fungsi, Database Oracle yang digunakan untuk hampir semua aplikasi di tingkat perusahaan. Dengan demikian, database Oracle mendominasi industri perbankan. Sepuluh bank top dunia menggunakan database Oracle untuk melakukan bisnis mereka. Hal ini terutama karena fungsi Oracle. Mereka menyediakan kombinasi tinggi tingkat teknologi dan solusi bisnis yang terintegrasi. Ini adalah sempurna untuk hampir semua perusahaan yang memiliki data dalam jumlah besar untuk menyimpan dan mengakses.
  • Handal, Keuntungan lain yang tidak kalah penting yang ditawarkan oleh database Oracle adalah kehandalan mereka. Oracle adalah database yang memberikan kinerja yang sangat baik ketika ditantang dengan tugas-tugas berat. Seperti Tes ASAM, yang merupakan alat penting yang digunakan untuk memastikan integritas data yang tersimpan, dengan mudah disahkan oleh database Oracle. Tes ini penting karena dapat diandalkan penyimpanan data adalah tujuan utama dari database. Dengan demikian, database Oracle telah terbukti memberikan integritas yang tinggi penyimpanan data.
  • Teknologi Flashback, Database Oracle menggabungkan teknologi Flashback, yang merupakan keuntungan yang signifikan. Dalam suatu hal outage pada aplikasi yang dikarenakan sejumlah alasan, menjadi penting untuk tidak kehilangan data yang tersimpan pada sistem database. Flashback teknologi Oracle memungkinkan untuk pemulihan data yang efisien salah dihapus atau hilang. Dengan demikian, teknologi Flashback dasarnya menghilangkan kesalahan manusia dan meningkatkan waktu pemulihan database. Pada akhirnya, fitur ini memungkinkan untuk menyederhanakan manajemen dan proses administrasi.

Kelemahan Oracle

  • Ketidakmampuan untuk Melaksanakan Pengolahan Rekursif, Pengolahan Rekursif adalah jenis fungsi komputer (atau program) di mana salah satu langkah dari sebuah program (atau prosedur) tayangan ulang seluruh program (atau prosedur). SQL tidak memiliki konstruksi perulangan yang umum di tingkat tinggi lainnya bahasa pemrograman, seperti untuk dan apa loop. Hal ini tidak dapat mengulangi tindakan dan tidak ada cara untuk mendefinisikan konstruksi perulangan berulang di SQL.
  • Ketidakcocokan dan Kompleksitas, Salah satu kelemahan utama dari Oracle SQL adalah inkonsistensi dan ketidakcocokan data dalam bidang waktu dan sintaks tanggal, penggabungan string dan sensitivitas kasus. Bahasa adalah kompleks, dengan pendekatan kata kunci serupa dalam struktur COBOL (umum berorientasi bisnis bahasa), dengan sintaks yang lebih sedikit dan aturan tata bahasa.
  • Fungsi yang terbatas, SQL adalah bahasa domain yang spesifik atau tujuan khusus, dan penggunaannya terbatas pada domain program khusus. Pernyataan SQL dioperasikan pada tabel dan set data, seperti database personil dan spreadsheet akuntansi. SQL adalah bahasa deklaratif domain tertentu yang terbatas pada representasi data dalam bentuk tabel.

Kerangka Kerja (Framework)

Dalam pemrograman komputer, sebuah kerangka kerja perangkat lunak merupakan abstraksi di mana perangkat lunak yang menyediakan fungsionalitas generik dapat selektif diubah oleh kode pengguna, sehingga memberikan perangkat lunak aplikasi tertentu. Ini adalah koleksi library perangkat lunak yang menyediakan antarmuka pemrograman aplikasi terdefinisikan (API). kerangka kerja yang sering digunakan oleh para pengembang perangkat antara lain .Net Framework. Berikut Kelebihan dan Kekurangannya:

Kelebihan .NET Framework

  • Sederhana, .Net Framework dirancang agar mudah untuk digunakan dan karena itu mudah untuk menulis, kompilasi, debug, dan belajar dari bahasa pemrograman lain. Alasan bahwa mengapa .Net Framework menggunakan alokasi memori secara otomatis dan pengumpulan sampah.
  • Berorientasi object, .Net Frameworkadalah berorientasi objek karena pemrograman di .Net Framework berpusat pada membuat objek, memanipulasi objek, dan membuat object tersebut bekerja sama. Hal ini memungkinkan Anda untuk membuat program modular dan kode dapat digunakan kembali.
  • Potensi Multi-platform, Seperti halnya Java, Microsoft berniat untuk membuat. NET tersedia sebagai antarmuka multiplatform, artinya dapat beroperasi pada sistem operasi apapun yang menginstal versi sendiri. NET. Sistem operasi tersebut dapat mengaitkan fungsi sendiri ke perpustakaan NET. Dengan cara yang sama untuk panggilan fungsi tertentu pada setiap program. NET juga akan memanggil fungsi operasi-sistem yang terkait. Dengan cara ini, programmer tidak perlu belajar set baru panggilan untuk setiap sistem operasi, juga tidak harus port program mereka, membuat mereka lebih membengkak.
  • Rapid Development, Microsoft .NET Framework menyediakan implementasi interface grafis yang mudah untuk lingkungan pengembangan, membiarkan programmer desain jendela mereka tanpa menulis kode apapun untuk menghasilkan kontrol mereka. Hal ini perkembangan pesat memungkinkan perusahaan untuk lebih banyak keuntungan ketika waktu yang dihabiskan untuk proyek berkaitan langsung dengan keuntungan. Banyak perusahaan besar mulai menuntut .NET programmer. Dan melakukan jauh dengan bahasa pemrograman lama.
  • Open Source, Hampir setiap orang dapat membuat perubahan ke NET Framework. Atau mempelajari lebih lanjut tentang fungsi mereka gunakan dengan melihat kode sumbernya. Sistem operasi pengembang dapat menggunakan sumber NET. Untuk melaksanakan fungsi dalam sistem operasi mereka sendiri, memperluas jangkauan arsitektur pemrograman Microsoft. Pada 2010, kerangka. NET telah mencapai Mac OSX, BSD, Linux, Solaris dan sistem operasi lainnya melalui antarmuka Mono Novell.

Kelemahan .NET Framework

  • Penggunaan Memory, Penggunaan Memory pada beberapa class pada .NET Framework belum optimal, sehingga menyebabkan applikasi yang dibangun dengan menggunakan .NET Framework membutuhkan memory yang cukup besar.
  • Lambat,  Applikasi yang dibangun menggunakan .NET Framework lebih lambat jika dibandingkan dengan pemrogramman native
Kategori:Tidak Dikategorikan