ラベル WPF の投稿を表示しています。 すべての投稿を表示
ラベル WPF の投稿を表示しています。 すべての投稿を表示

2017年6月16日金曜日

MVVMパターンのメリットがさっぱりわからない・・

MVVMパターンのメリットがさっぱりわからない・・


最近は、WindowsFormsでは無く、WPFで開発をするみたいだけれども・・・


MVVMパターンで開発が主流になってきているみたい。


MVCみたいなやつの、アプリ版みたいな感じなんだけれども・・・


・・・が、ここまでするメリットがさっぱり分からない。


XAML側のDataBindingの指定で、直接コードの値がバインドされるのは面白いけれど・・
だからなに?って感じ。

コントロールの間にデータ中継される要素が増えて、ただ複雑になって、コード量が増えるだけなんでは?

そして、日本の現場で、実際に、デザイナーと、コーダーが分かれて作業されるなんて日が実際に来るのだろうか・・・

MVCですら、実際には、デザイナーと、コーダーが分かれて作業しているなんてみ見たことが無く、実際には、デザインとコーダーが合体している。

デザイナーから、謎な巨大なイラストレーターのAIファイルを渡されるだけで・・
実際の画像加工もコーダーの人がやっているケースが殆どでは・・!?

が、これが、今の主流なのか・・・

自分は、現場が喜ぶ結果が出来たら、あまり過程にはこだわらない。
今までと同じ表現で良いのに、複雑なプロセスを踏まなきゃいけないなんて・・・

これは、技術の進歩何だろうか??


何となく、JAVAが人気な理由が分かってきた。
JAVAは、コーディングスタイル自体は大きく変わっておらず、コード量は多い物の、古いエンジニアも現役で戦っていけるくらい、成熟している。

・・・が、Microsoft系の言語は、.NET Frameworkになってから、コロコロコーディングスタイルが変わって、もはや、どれが標準なのか、さっぱりぱりぱりだ。

結局のところ・・・

すっごく揉めて、こだわって作っても、1年先にはまた新しい手法が登場して、
その時それに拘っているのは、ただのエンジニアの自己満足だと思うのだけれども。。。


技術の進歩は、段々成熟して殆ど変わらないから、自分は、実際に現場の業務効率化で役に立つものだけを作っていたい。。。


言語・・・Python(パイソン)に乗り換えようかな・・・
Winアプリも、Webアプリも、AI学習も人工知能も何でもありで、Googleも使っている言語のようだし・・・




因みに、Pythonは、TIOBEではかなり順位をあげて、一気に、4位の言語へ・・・!!



最近、なんか、言語が多様化しすぎて意味不明な状態だから、業務を効率化させるためのプロデューサーみたいな感じな事が出来ないか模索中。

今は、殆ど自営状態で、営業も、エンジニアも、経理も全部ひとり状態でしんどい(^^;
このまま続けて、黒字になるのか、赤字になるのか等、不安すら持っていられない程、激務な状態だし・・・

顧客がもっと取れれば良いのだけれども、自分で営業してみて、日本の企業が、システムに対する価値(相場)が余りにも低すぎてビックリだ・・・


日本の場合、大きなプロジェクトは、大手ゼネコンの餌にありついているだけみたいな構図で、中の人で出来ない難しいことだけ作らされて、後はソース渡して、はい、さようなら みたいなのが起きることがまた目に見えているから、どうしてもやりたくなくて・・・・


やっぱり、どっかのメーカーな会社員になれないか、検討中。。。

業務効率化や自動化がやっぱり面白くて好きだからそういうのやりたいなぁ・・。
お金のある会社で・・(^^;

お金のない会社ではもうやりたくないなぁ(;´・ω・) ジリ貧になる





2017年5月3日水曜日

WPF+EntityFrameworkで簡単にログを残すソースの公開 -

WPF+EntityFrameworkで簡単にログを残すソースの公開 
How to use to PutActionLog on  WPF + EntityFramework

EntityFrameworkなら、ソースからデータベースの作成、テーブルの作成が自動で行えるので、下記のソースさえコピペして貰えれば、データベースが、Postgresだろうが、SqlServerだろうが、Oracleだろうが自動的に全部使えるようになると思います。

DataAccess.PutActionLogにて、IPアドレス、コンピュータ名等モロモロと、引数で渡した情報を+アルファを記録しています。


ActionLog.cs  モデル(Model)
    using System;
    using System.Collections.Generic;
    
    public partial class ActionLog
    {
        public int ActionLogID { get; set; }
        public string SystemName { get; set; }
        public string SystemVersion { get; set; }
        public string IpAddress { get; set; }
        public string TerminalID { get; set; }
        public string UserID { get; set; }
        public string FunctionName { get; set; }
        public string Condition { get; set; }
        public string ErrorText { get; set; }
        public Nullable<System.DateTime> CreateDate { get; set; }
        public Nullable<System.DateTime> UpdateDate { get; set; }
        public string Property1 { get; set; }
    }


context:コンテキスト
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
 
    public partial class MYSystemEntities : DbContext
    {
        public MYSystemEntities()
            : base("name=MYSystemEntities")
        {
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
 
        public virtual DbSet<ActionLog> ActionLogs { get; set; }
    }

DataAccess.cs
        public void PutActionLog(String LoginUser, String strFunctionName, String strCondition)
        {

            using (var context = new MYSystemEntities())
            {

                System.Net.IPAddress ipaddres = null;
                System.Net.IPHostEntry ipHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());

                foreach (System.Net.IPAddress ipAddr in ipHostEntry.AddressList)
                {
                    if (ipAddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                    {
                        ipaddres = ipAddr;
                        break;
                    }
                }

                context.ActionLogs.Add(new ActionLog
                {
                    SystemName = System.Windows.Application.ResourceAssembly.GetName().Name,
                    SystemVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(),
                    IpAddress = ipaddres.ToString(),
                    TerminalID = System.Net.Dns.GetHostName(),
                    FunctionName = strFunctionName,
                    Condition = strCondition,
                    UserID = LoginUser,
                    UpdateDate = DateTime.Now,
                    CreateDate = DateTime.Now
                });

                context.SaveChanges();
            }

        }



Thank you for Reading



WPF Doeventの実装方法

WPF Doeventの実装方法




WPFはWindows.formsのように、Doeventsが用意されていない為、自分で実装する必要がある。

基本的にマイクロソフトのヘルプにサンプルがあるので、それをコピペで使用するだけなのだけれども、毎回探すのも不便なので、自分のブログに準備してみた。


        #region "DoEvents"
        private void DoEvents()
        {
            DispatcherFrame frame = new DispatcherFrame();
            var callback = new DispatcherOperationCallback(ExitFrames);
            Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, callback, frame);
            Dispatcher.PushFrame(frame);
        }
        private object ExitFrames(object obj)
        {
            ((DispatcherFrame)obj).Continue = false;
            return null;
        }
        #endregion 


コピペするだけで使えます。
どうぞどうぞ。


2017年4月22日土曜日

WPF(XAML)での開発が主流になっているので、Formsは完全に捨ててみた

WPF(XAML)での開発が主流になっているので、Formsは完全に捨ててみた

Photoshopみたいに、デザインが出来る。

どちらかというと、Android(アンドロイド)の開発ににたスタイルだけれども。


Windows Universal アプリケーション方式の開発が増えていっているので、XAMLからは逃れられないので、Windows.Formsスタイルは捨ててみた。


Android開発をやった事がある人ならとっつきやすいかも。

言語もC#を選べば、あまりJavaと変わらないし。



ただ、Windows.Formsでやっている人には悲報が。

プログラミングのスタイルが全く今までと違うから。

同じコントロールでもコーディング方法も違って・・・ 


自分はこっちが好き。

見た目はとても重要だから。